【发布时间】:2013-06-03 22:32:30
【问题描述】:
我试图在 Rails 中返回对象的标题列表,但是我不断返回整个对象而不是标题属性。
loe 是具有属性的对象,该属性是文章列表(命名文章),每篇文章本身就是一个对象,具有称为标题的属性。
<%= loe.article.each { |x| print x.title } %>
这是我目前尝试进行迭代的方式,但这会返回整个文章列表。
【问题讨论】:
标签: ruby-on-rails ruby arrays
我试图在 Rails 中返回对象的标题列表,但是我不断返回整个对象而不是标题属性。
loe 是具有属性的对象,该属性是文章列表(命名文章),每篇文章本身就是一个对象,具有称为标题的属性。
<%= loe.article.each { |x| print x.title } %>
这是我目前尝试进行迭代的方式,但这会返回整个文章列表。
【问题讨论】:
标签: ruby-on-rails ruby arrays
使用Array#map 在每个上调用title 方法并使用结果创建一个新数组:
loe.article.map(&:title)
以上是简写
loe.article.map{ |o| o.title }
【讨论】:
使用像'<%='这样的ERB标签意味着您要求ERB显示该表达式的结果(除了您在块内调用print这一事实之外)。调用像 each 这样的 Enumerable 方法将返回原始数组,这就是您所看到的。
将标签更改为<%(删除=),你应该很高兴。
【讨论】:
loe.article.map {|x| x.title} 或许?
【讨论】:
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) 以仅返回该字段。您仍然可以获得对象,但它们是只读的,并且填充了 select 返回的任何内容,因此要获取标题数组,您需要执行 collect。
【讨论】: