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モデルにaccepts_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 に答える