2

我有一个带有嵌套属性的表单。我正在为学生注册一所学校,该学生可以有许多紧急联系人。

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 个紧急联系人,那么我会收到紧急联系人姓名不能为空的验证错误。如果该特定紧急联系人的表格中的所有字段都是空白的,我怎样才能使它不验证?

4

2 回答 2

9

我假设您已经在 Student 模型中设置了 accept_nested_attributes 。您需要添加一个 :reject_if 过程。如果 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? }根据需要将其修改为 等。

于 2012-09-13T15:59:54.557 回答
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

于 2012-09-21T09:32:22.743 回答