私は新しいモデルのネストされた属性のバリデーションに関しては新しく、解決することは全く不可能です。ただ1つの特定のモデルのネストされた属性に対するRailsの検証
私は以下のとおりPharmacy model
を持っている:私も現在、次のようになりAddress model
持っ
class Pharmacy < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
validates :address, presence: true
validate :address_postcode_town
def address_postcode_town
errors.add(:'address.postcode', 'Postcode can't be blank') if address&.postcode.blank?
errors.add(:'address.town', "Town can't be blank") if address&.town.blank?
end
end
:あなたが見ることができるように
class Address < ActiveRecord::Base
validates :first_line, presence: true
end
を、アドレスが最初の行の存在を検証し、私はPharmacy
の郵便番号の検証を追加する必要があります、そして、私が紛失したとき、ここにその部分が来ます。
私は私のAddress
モデルでvalidates :postcode, presence: true
を追加しようとしたが、それは同様に受注のための要件であるだけで、私のOrder
のための私のPharmacy
ないため、Address
の属性である郵便番号の検証を、必要とします、私は起こりたくない。
ビューがpostcode can't be blank
メッセージ表示されていないように私も、それが動作するかどうか確認してください私のPharmacy
モデルでbefore_validation
を試みたが、していない:私は一つのモデルにネストされた属性の検証を追加することができますどのように
before_validation :ensure_address_has_a_value
def ensure_address_has_a_value
return false if address.blank?
!address.postcode.blank? || !address.city.blank?
end
を他の人はそのまま残しておきますか?
カスタム検証を作成することができましたが、ビューではpostcode
もtown
も必要な属性として認識しないため、IDにエラーメッセージが表示されません。それはフォームを再びレンダリングするだけです。
params
はPharmacyController
で利用可能であり、私の見解は以下のようになります。
**simple_form_for :pharmacy goes here**
<%= f.simple_fields_for :address do |a|%>
<%= a.input :first_line, label: t('.first_line'), wrapper_html: {class: 'form-row'}%>
<%= a.input :second_line, label: t('.second_line'), wrapper_html: {class: 'form-row'}%>
<%= a.input :postcode, label: t('.postcode'), wrapper_html: {class: 'form-row'} %>
<%= a.input :town, label: t('.town'), wrapper_html: {class: 'form-row'} %>
これはValidation for nested attributes
は、誰もがこの上でいくつかの光を当てることができ、私を助けていませんか?事前に多くの感謝!
おかげで、私は間違っていないよ場合、それはなく、設定されているモデルの値に依存している、私はそれを試してみましたが、 'reject_if'役立つかもしれないGoogle検索の最初の結果であり、関連するモデルからの値に基づいています。彼らが受け入れる必要があるモデルが特別な特徴を持っているのではなく、条件を満たしていれば、その属性を受け入れる必要があります。 –
私はあなたのような何かをすることができると信じています 'accepts_nested_attributes_for:アドレスreject_if:proc {|属性|属性['zipcode']。空白? } ' あなたの' Pharmacy'モデルで。 –
私はカスタム検証を作成することができましたが、ビューは 'postcode'と' town'を必須属性として認識しないので、idはエラーメッセージを表示しません。 –