2013-10-28 60 views
1

在我的Rails應用程序,我有兩個模型之間的has_many through關係,因此我喜歡這個創建新的對象:如何驗證Rails模型中的person_ids?

Project.new(:name => 'Test', :person_ids => [1, 2, 3]) 

什麼是驗證模型的person_ids的好辦法?

這是我到目前爲止有:

class Project < ActiveRecord::Base 

    has_many :people_projects 
    has_many :people, :through => :people_projects 

    validates :person_ids, inclusion => { :in => lambda { |x| x.valid_people } } 

    def valid_people 
    user.people.map(&:id) 
    end  

end 

然而,這不起作用,因爲person_ids才能發佈,在數組中。

任何人都可以幫忙嗎?

+0

你可以展示你的人際關係和準確的告訴你這是想幹什麼? – rb512

+0

@ rb512:我在上面添加了更多信息。 – Tintin81

+0

這是你想要做的嗎? http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_associated – depa

回答

2

使用像

一個自定義的驗證方法
class Project < ActiveRecord::Base 
    validate :valid_people 

    def valid_people 
    people = user.people.pluck(:id) 
    if person_ids.blank? || (person_ids - people).any? 
     errors.add(:person_ids, "Please add real people") 
    end 
    end  

end 
+2

除了'!(...)。blank?',你還可以使用'(...)。any?'來消除雙重否定。 –

+0

@HolgerJust ..感謝您的建議。更新了答案:) –

+0

謝謝,這工作!不過,我不得不使用'errors.add'。 – Tintin81