RubyonRails将属性映射到特定列

RubyonRails将属性映射到特定列,ruby,attributes,map,Ruby,Attributes,Map,@models.map(&:attributes))返回从每列到其在数据库中的值的哈希列表 我如何限制它,以便只返回特定列(例如,仅返回名称和id?) 另外,如何将多个列组合成一个新的key=>value对?例如,如果一个用户有first_name和last_name,则上述内容将返回 [{"first_name" => "foo", "last_name" => "bar"}] but I want it to be [{"name" => "foo bar"}] 我如何实

@models.map(&:attributes))
返回从每列到其在数据库中的值的哈希列表

我如何限制它,以便只返回特定列(例如,仅返回名称和id?)

另外,如何将多个列组合成一个新的key=>value对?例如,如果一个用户有first_name和last_name,则上述内容将返回

[{"first_name" => "foo", "last_name" => "bar"}] but I want it to be [{"name" => "foo bar"}]
我如何实现这一转变?谢谢

对于第一部分(限制散列中的属性):

要将多个属性组合成一个新属性,最干净的方法通常是访问器方法:

class User < ActiveRecord::Base
  def name
    "#{first_name} #{last_name}"
  end
end
如果使用属性哈希中的多个属性,则可以使用“合并”:

@models.map do |model|
  model.attributes.slice(:id, :first_name, :last_name).merge(:name => model.name)
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