8

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

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

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

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

4

4 回答 4

22

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

loe.article.map(&:title)

以上是简写

loe.article.map{ |o| o.title }
于 2013-06-03T22:37:21.563 回答
2

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

将标签更改为<%(删除=),您应该一切顺利。

于 2013-06-04T05:30:10.630 回答
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 and collect are aliases, and you can call select(:fieldname) on an AREL to return just that field. You still get objects, but they're read-only and are populated with whatever the select returned, so to get the array of titles you need to do the collect.

于 2013-06-04T05:22:09.240 回答
1

loe.article.map {|x| x.title}也许?

于 2013-06-03T22:36:24.730 回答