2017-02-14 34 views
0

假設我有下面的類:如何檢索模型的記錄屬性,包括has_many ID作爲散列?

class User < ActiveRecord::Base 
    has_many :addresses 
end 

而且我初始化以下記錄:
user = User.new(first_name: "John", last_name: "Doe", address_ids: [1, 2, 3])
已經存在的Rails的提供了一個方便的方法來檢索模型記錄的屬性:
user.attributes # => {first_name: "John", last_name: "Doe"}
不過,我也需要得到包含address_ids以及哈希,那就是:

user.attributes_with_has_many_associations 
# => {first_name: "John", last_name: "Doe", address_ids: [1, 2, 3]} 

我在尋找一個一般在任何給定的記錄(例如,不涉及反映協會拉動屬性,並最終導致污染模型本身,畢竟我正在尋找一種純粹用於測試目的的方法),或者至少在測試代碼中分離出一種方法。

+0

不應該User.address_ids給你完全呢?如果你已經把ID保存爲一個數組,你可以像這樣檢索,不是嗎? –

+0

有沒有這樣做的內置方式。只需手動添加你的關聯,即'user.attributes.tap {| a | a [:address_ids] = a.address_ids}' – meagar

回答

0

不確定是否存在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 
相關問題