迭代对象数组和返回属性

时间:2013-06-03 22:32:30

标签: ruby-on-rails ruby arrays

我试图在Rails中返回一个对象标题列表,但是我一直在返回整个对象而不是title属性。

loe是具有属性的对象,该属性是文章列表(命名文章),每篇文章本身都是一个具有名为title的属性的对象。

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

是我目前正在尝试进行迭代的方式,但这会返回整个文章列表。

4 个答案:

答案 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}

mapcollect是别名,您可以在AREL上调用select(:fieldname)来返回该字段。你仍然可以获得对象,但它们是只读的,并且填充了返回的选项,因此要获得collect所需的标题数组。