Rails从db获取多个值

时间:2013-07-23 17:16:32

标签: ruby-on-rails variables hash

我正在尝试从数据库中检索多个值到一个变量中并返回整个事物。这就是我正在做的事情

my_hash = {
  'name' => 'John'
  'current_location' => 'Sweden'
}

现在我需要进入数据库并检索所有记录并将它们存储到单个变量中,然后我需要将该变量添加到my_hash中,以便我可以返回整个事物。我该怎么做?

示例:

last_names = Names.where('first_name = ?', 'John').select('last_name').last_name
my_hash.add(last_names)
return my_hash

既然上面不起作用,有人可以告诉我实现这个目的的正确方法吗?

1 个答案:

答案 0 :(得分:1)

你试图做以下事情吗?

my_hash = {
  'name' => 'John'
  'current_location' => 'Sweden'
}

my_hash['last_names'] = Names.where('first_name = ?', 'John')
  .select('last_name')
  .map { |name| name.last_name } 
# or shorthand version .map(&:last_name)

return my_hash

更新了

# get name objects from the database 
# add select as an optimization if desired
last_name_list = Names.where('first_name = ?', 'John')
# get an array of only the last_name fields
last_names = last_name_list.map { |name| name.last_name }
# assign the array to the new hash key 'last_names'
my_hash['last_names'] = last_names

请参阅http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-map了解地图上的文档,请注意地图和收集是相同的

另一个例子

names = Names.where('updated_at >= ?', Date.parse('2013-01-01'))

# get an array of 'full names'
full_names = names.map do |name| 
  "#{name.first_name} #{name.last_name}"
end