2013-06-03 37 views
5

我试图返回的Rails对象的标题的列表,但我不断收到整个对象返回而不是title属性。遍历对象和返回数组属性

LOE是具有它的文章列表(命名文章),每篇文章都是用自己的title属性的对象的属性的对象。

<%= loe.article.each { |x| print x.title } %> 

是我目前如何尝试做迭代,但是这将返回整个文章列表。

回答

20

使用Array#map调用title方法上的每个,并创建一个新的数组的结果:

loe.article.map(&:title) 

以上是简写

loe.article.map{ |o| o.title } 
1

loe.article.map {|x| x.title}吧?

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} 

mapcollect是别名,您可以在AREL上致电select(:fieldname)返回该字段。你仍然可以得到对象,但它们是只读的,并且会随着返回的选择而填充,所以要获得需要执行collect的标题数组。

2

使用'<%='等ERB标记表示您要求ERB显示该表达式的结果(超出了您在该块内部调用print的事实)。对each等Enumerable方法的调用将返回原始数组,这就是您所看到的。

更改标签<%(除去=),你应该是好去。

+0

问题的唯一答案 –