2016-11-24 13 views
0

私は新しいモデルのネストされた属性のバリデーションに関しては新しく、解決することは全く不可能です。ただ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 

を他の人はそのまま残しておきますか?

カスタム検証を作成することができましたが、ビューではpostcodetownも必要な属性として認識しないため、IDにエラーメッセージが表示されません。それはフォームを再びレンダリングするだけです。

paramsPharmacyControllerで利用可能であり、私の見解は以下のようになります。

**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

は、誰もがこの上でいくつかの光を当てることができ、私を助けていませんか?事前に多くの感謝!

答えて

0
+0

おかげで、私は間違っていないよ場合、それはなく、設定されているモデルの値に依存している、私はそれを試してみましたが、 'reject_if'役立つかもしれないGoogle検索の最初の結果であり、関連するモデルからの値に基づいています。彼らが受け入れる必要があるモデルが特別な特徴を持っているのではなく、条件を満たしていれば、その属性を受け入れる必要があります。 –

+0

私はあなたのような何かをすることができると信じています 'accepts_nested_attributes_for:アドレスreject_if:proc {|属性|属性['zipcode']。空白? } ' あなたの' Pharmacy'モデルで。 –

+0

私はカスタム検証を作成することができましたが、ビューは 'postcode'と' town'を必須属性として認識しないので、idはエラーメッセージを表示しません。 –

関連する問題