2011-06-27 18 views
1

@models.map(&:attributes))回報散列的列表,從每列到它的價值在DBRuby on Rails的地圖屬性到特定的列

如何限制它,以便只有特定的列返回(如只是名稱和ID?) 。

另外,如何將多個列組合到一個新的鍵=>值對中?例如,如果用戶有first_name和last_name,則上面將返回

[{"first_name" => "foo", "last_name" => "bar"}] but I want it to be [{"name" => "foo bar"}] 

如何實現此轉換?謝謝!

回答

5

對於所述第一部分(限制在散列的屬性):

@models.map {|model| model.attributes.slice(:id, :name)} 

對於多個屬性組合成一個新的屬性,所述乾淨的方式通常是一個存取方法:

class User < ActiveRecord::Base 
    def name 
    "#{first_name} #{last_name}" 
    end 
end 

然後在迭代期間手動構建您的散列:

@models.map {|model| {:id => model.id, :name => model.name}} 

如果您使用更多比屬性哈希中的一個屬性,您可以使用合併:

@models.map do |model| 
    model.attributes.slice(:id, :first_name, :last_name).merge(:name => model.name) 
end