位置情報(通り、地方、郵便番号など)を含む私のモデルの検証をいくつか作成したいと思います。どの国が選択されているかに基づいてバリデーションルールを変更できるようにしたい。動的モデル検証
たとえば、米国&カナダでは、postal_codeの検証規則が異なります。さらに、いくつかの国ではpostal_codesがないため、検証ルールは必要ありません。
どうすればこのような実装を行うことができますか?
位置情報(通り、地方、郵便番号など)を含む私のモデルの検証をいくつか作成したいと思います。どの国が選択されているかに基づいてバリデーションルールを変更できるようにしたい。動的モデル検証
たとえば、米国&カナダでは、postal_codeの検証規則が異なります。さらに、いくつかの国ではpostal_codesがないため、検証ルールは必要ありません。
どうすればこのような実装を行うことができますか?
モデルにこれを入れ、検証のためのカスタムロジックを実行します。
validate :location_should_be_valid
def location_should_be_valid
# run all your custom logic here
# if it isn't valid, add an error indicating why
if country == "Canada"
errors.add(:postal_code, "Invalid postal code for Canada") if postal_code.length != 7
end
end
Railsのガイドでは、このについて詳しく読む:
http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods
validates :postal_code, :presence => true, :if => :check_country
def check_country
["US", "Canada"].include?(self.country)
end
これはより適切なアプローチです –
私はlocation_should_be_validの中から自分のフォームの値にアクセスするにはどうすればよいですか? –
これらはモデルの通常の変数に格納されます。これは、値が入力された後、値が保存される前に呼び出されます。私はこれの例を与えるために答えを修正しました。 – dontangg