2013-10-28 36 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