我有一个带有嵌套属性的表单。我正在向学校注册学生,学生可以有很多紧急联系人。
class EmergencyContact < ActiveRecord::Base
attr_accessible :full_name, :relationship, :mobile_phone, :student_id
belongs_to :student
validates :full_name, :presence => true
validates :relationship, :presence => true
end
所以我有一个表格来注册学生,然后有3行输入紧急联系人。类似于以下(当然这是一个过于简化的版本......
Student Name: _____________
Emergency Contacts
------------------------------------------
| Name | Relationship |
------------------------------------------
| | |
------------------------------------------
| | |
------------------------------------------
| | |
------------------------------------------
如果我只输入2个紧急联系人,那么我将得到验证错误,即紧急联系人的姓名不能为空。 如何确保该特定紧急联系人表单中的所有字段都是空白的?
答案 0 :(得分:9)
我假设您在学生模型中设置了accepts_nested_attributes。您需要添加:reject_if proc。如果proc计算结果为true,它将忽略该行。
class Student < ActiveRecord::Base
has_many :emergency_contacts
accepts_nested_attributes_for :emergency_contacts,
:reject_if => lambda { |a| a[:full_name].blank? }
end
您可以根据需要将其修改为lambda { |a| a[:name].blank? && a[:relationship].blank? }
等内容。
答案 1 :(得分:6)
您还可以将其修改为更通用的内容,例如
proc { |attributes|
attributes.delete :_destroy
attributes.reject { |key, value| value.blank? }.empty?
}
修改强>
你也可以用最简单的方式做到这一点
accepts_nested_attributes_for :emergency_contacts, :reject_if => :all_blank
您可以在此处找到一些文档:http://api.rubyonrails.org