1
has_many
アソシエーションの一部の属性を検証するためにカスタムバリデータを作成しました。validates_withでのアソシエーションへのアクセス
私のクラス:
class User < ApplicationRecord
has_many :addresses
accepts_nested_attributes_for :addresses, allow_destroy: true
validates_with UniquenessMemoryValidator,
attributes: [:name],
collection: :addresses,
message: 'My custom message'
end
UniquenessMemoryValidator:(:アドレスこの場合)、それはnilを印刷し
class UniquenessMemoryValidator < ActiveModel::Validator
def validate(record)
attrs, message = options.values_at(:attributes, :message)
collection = record[options[:collection]]
puts "collection #{collection}" # it's nil
end
end
問題は、私は私の関連付けをアクセスしようとするということです。
私の質問は、バリエーターでの配列に "入れ子"にアクセスするにはどうすればいいですか?
PS:私の "レコード"の他の属性にはアクセスできません。それは通常のメソッド呼び出しのために動的にそれをしたい場合は、send
で試すことができ
回答ありがとうございますが、これは私が達成しようとしているものではありません。私はクラスバリデータを作成し、そのクラスの*ネストされた*アソシエーションを使用してカスタム検証を実行したいと思います。あまりにも多くのattempsの後で、私は*問題を引き起こしているものを発見しました*:**大括弧構文**。私はこれを行う私のアソシエーションにアクセスすることができません: 'レコード[アサーション]'。ドットシンタックスを使用すると**動作します**一般的なバリデータ(ダイナミック)であるため、ドットシンタックスを使用できません。 –
@ dev_054しかし、この場合、私が理解しているように 'record.send(assocation)'を使うことができます。 – idej
それだけです。ありがとうございます。答えに追加することができますので、確認することができます。 –