访问validates_with中的关联

时间:2017-04-25 01:34:54

标签: ruby-on-rails ruby

我已经创建了一个自定义验证程序,以验证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:我可以访问我的“记录”的任何其他属性,而不是关联。

1 个答案:

答案 0 :(得分:1)

如果您想动态执行此操作,可以尝试send,因为它是常用的方法调用:

collection = record.send(options[:collection])

此外,您只能在使用accepts_nested_attributes_for的{​​{1}}验证中访问嵌套数组。 在reject_if中,您可以传递方法

reject_if