我正在尝试通过where查询定义一个新数组,但我只能以一种方式工作。
这是:
<%
@children = Array.new
Topic.where(breadcrumb_id: @topic.id).each do |y|
@children.push(y.name)
end
return @children
%>
Returns the array ["Performance Arts", "Visual Arts", "Physical Arts", "Music", "Culinary Arts"] (All topics)
但我更愿意这样做
@children = Topic.where(breadcrumb_id: @topic.id)
return @children.each.name
Returns "undefined method `name' for #<Enumerator:0x007fe92205a1f0>"
无论出于何种原因。每个都不会正确回应...虽然它适用于第一个例子中的初始调用。有什么区别?
并且有没有办法这样做,以便我可以直接通过数组拉名称?
答案 0 :(得分:3)
这不是each
所做的。您可能正在寻找map
(或其别名)collect
Topic.where(...).map {|topic| topic.name}
使用Symbol#to_proc快捷方式可以缩短它:
Topic.where(...).map &:name
答案 1 :(得分:2)
在Rails 3.2上还有pluck
:
@children = Topic.where(breadcrumb_id: @topic.id).pluck("name")
这样做有SELECT name FROM ...
而不是SELECT *
答案 2 :(得分:1)
#where方法返回一个ActiveRecord::Relation对象,而不是一个数组。
要获取数组,请在其上调用#all或#to_a:
@children = Topic.where(breadcrumb_id: @topic.id).all
@children = Topic.where(breadcrumb_id: @topic.id).to_a
请注意,您无需将其转换为数组以便迭代它。
查看Frederick Cheung对你使用#each不起作用的答案。