我试图在Rails中返回一个对象标题列表,但是我一直在返回整个对象而不是title属性。
loe是具有属性的对象,该属性是文章列表(命名文章),每篇文章本身都是一个具有名为title的属性的对象。
<%= loe.article.each { |x| print x.title } %>
是我目前正在尝试进行迭代的方式,但这会返回整个文章列表。
答案 0 :(得分:21)
使用Array#map
在每个方法上调用title
方法并创建一个包含结果的新数组:
loe.article.map(&:title)
以上是
的简写loe.article.map{ |o| o.title }
答案 1 :(得分:2)
使用像'<%=
'这样的ERB标记意味着您要求ERB显示该表达式的结果(超出您在块内调用print
的事实)。调用像each
之类的Enumerable方法将返回原始数组,这就是您所看到的。
将代码更改为<%
(删除=
),您应该好好去。
答案 2 :(得分:1)
loe.article.map {|x| x.title}
?
答案 3 :(得分:1)
class LOE < ActiveRecord::Base
has_many :articles
end
class Article < ActiveRecord::Base
belongs_to :loe
end
loe.articles.select(:title).collect{|a| a.title}
map
和collect
是别名,您可以在AREL上调用select(:fieldname)
来返回该字段。你仍然可以获得对象,但它们是只读的,并且填充了返回的选项,因此要获得collect
所需的标题数组。