遍历对象数组并返回属性。

8
我想返回Rails中对象标题的列表,但我一直得到整个对象而不是标题属性。 loe是一个具有文章列表属性(名称为article)的对象,每篇文章本身都是一个带有标题属性的对象。
<%= loe.article.each { |x| print x.title } %>

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

22
使用Array#map方法,在每个元素上调用title方法,并创建一个包含结果的新数组:
loe.article.map(&:title)

以上是简写形式

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

2
使用像 '<%= ' 这样的ERB标签意味着您正在请求ERB显示该表达式的结果(除了您在块内调用print之外)。而像each这样的Enumerable方法调用将返回原始数组,这就是您看到的内容。
将标签更改为<%(删除=),然后您就可以开始了。

问题的唯一答案 - Andrey Deineko

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)只返回该字段。你仍然会得到对象,但它们是只读的,并且填充了select返回的内容,所以要获取标题数组,你需要使用collect


1

loe.article.map {|x| x.title} 或许是这样的代码?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接