我已经创建了一个自定义验证程序,以验证has_many
关联中的某些属性。
我的班级:
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:
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
问题在于,当我尝试访问我的关联(在这种情况下:地址)时,它打印为nil。
所以我的问题是:如何在验证器中访问我的“嵌套”数组?
PS:我可以访问我的“记录”的任何其他属性,而不是关联。
答案 0 :(得分:1)
如果您想动态执行此操作,可以尝试send
,因为它是常用的方法调用:
collection = record.send(options[:collection])
此外,您只能在使用accepts_nested_attributes_for
的{{1}}验证中访问嵌套数组。
在reject_if
中,您可以传递块或方法。
reject_if