Ruby on rails 如何检索模型';s记录属性,包括作为散列的\u多个ID?

Ruby on rails 如何检索模型';s记录属性,包括作为散列的\u多个ID?,ruby-on-rails,ruby,ruby-on-rails-4,rspec,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Ruby On Rails 5,假设我有以下类别: class User < ActiveRecord::Base has_many :addresses end 我正在寻找一种在任何给定记录上执行此操作的通用方法(即,不涉及反映关联以提取属性并最终污染模型本身,毕竟我正在寻找一种纯粹为了测试目的而执行此操作的方法),或者至少在测试代码中隔离一个方法 不确定是否有Rails方法,但您可以自己定义 def attributes_with_has_many_associations attributes.merge

假设我有以下类别:

class User < ActiveRecord::Base
  has_many :addresses
end

我正在寻找一种在任何给定记录上执行此操作的通用方法(即,不涉及反映关联以提取属性并最终污染模型本身,毕竟我正在寻找一种纯粹为了测试目的而执行此操作的方法),或者至少在测试代码中隔离一个方法

不确定是否有Rails方法,但您可以自己定义

def attributes_with_has_many_associations
  attributes.merge(
    self
      .class
      .reflect_on_all_associations(:has_many)
      .map(&:plural_name)
      .map { |as| { as.to_sym => self.send(as) } }
      .reduce(&:merge)
  )
end

User.address\u id不应该准确地告诉您吗?如果您已经将ID保存为一个数组,您可以像那样检索相同的ID,不是吗?没有内置的方法来执行此操作。只需手动添加所需的关联,即
user.attributes.tap{a | a[:address_ids]=a.address_ids}
def attributes_with_has_many_associations
  attributes.merge(
    self
      .class
      .reflect_on_all_associations(:has_many)
      .map(&:plural_name)
      .map { |as| { as.to_sym => self.send(as) } }
      .reduce(&:merge)
  )
end