67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Subproject < ApplicationRecord
 | |
|   belongs_to :project
 | |
| 
 | |
|   belongs_to :client, class_name: 'Client', optional: true
 | |
|   belongs_to :owner, class_name: 'Client', optional: true
 | |
|   belongs_to :builder, class_name: 'Client', optional: true
 | |
| 
 | |
|   accepts_nested_attributes_for :client, reject_if: :all_blank
 | |
|   accepts_nested_attributes_for :owner, reject_if: :all_blank
 | |
|   accepts_nested_attributes_for :builder, reject_if: :all_blank
 | |
| 
 | |
|   validates :subproject_name, presence: true
 | |
|   validate :client_presence_check
 | |
|   validate :owner_presence_check
 | |
|   validate :builder_presence_check
 | |
| 
 | |
|   def client_attributes=(attributes)
 | |
|     self.client = Client.find_or_initialize_by(email: attributes[:email])
 | |
|     self.client.assign_attributes(attributes)
 | |
|   end
 | |
| 
 | |
|   def owner_attributes=(attributes)
 | |
|     self.owner = Client.find_or_initialize_by(email: attributes[:email])
 | |
|     self.owner.assign_attributes(attributes)
 | |
|   end
 | |
| 
 | |
|   def builder_attributes=(attributes)
 | |
|     self.builder = Client.find_or_initialize_by(email: attributes[:email])
 | |
|     self.builder.assign_attributes(attributes)
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def client_presence_check
 | |
|     if client_id.blank? && (client_attributes_blank?)
 | |
|       errors.add(:client, "must be selected or a new client must be provided")
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def owner_presence_check
 | |
|     if owner_id.blank? && (owner_attributes_blank?)
 | |
|       errors.add(:owner, "must be selected or a new owner must be provided")
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def builder_presence_check
 | |
|     if builder_id.blank? && (builder_attributes_blank?)
 | |
|       errors.add(:builder, "must be selected or a new builder must be provided")
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def client_attributes_blank?
 | |
|     return true if client.nil?
 | |
|     client.attributes.except("id", "created_at", "updated_at").values.all?(&:blank?)
 | |
|   end
 | |
| 
 | |
|   def owner_attributes_blank?
 | |
|     return true if client.nil?
 | |
|     owner.attributes.except("id", "created_at", "updated_at").values.all?(&:blank?)
 | |
|   end
 | |
| 
 | |
|   def builder_attributes_blank?
 | |
|     return true if client.nil?
 | |
|     builder.attributes.except("id", "created_at", "updated_at").values.all?(&:blank?)
 | |
|   end
 | |
| 
 | |
| end | 
