【问题标题】:Iterate over Array of Objects and Return Attributes迭代对象数组并返回属性
【发布时间】:2013-06-03 22:32:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby arrays


    【解决方案1】:

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

    loe.article.map(&:title)
    

    以上是简写

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

    【讨论】:

      【解决方案2】:

      使用像'&lt;%='这样的ERB标签意味着您要求ERB显示该表达式的结果(除了您在块内调用print这一事实之外)。调用像 each 这样的 Enumerable 方法将返回原始数组,这就是您所看到的。

      将标签更改为&lt;%(删除=),你应该很高兴。

      【讨论】:

      • 问题的唯一答案
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-13
          • 1970-01-01
          • 2015-08-29
          • 1970-01-01
          • 2023-03-24
          • 2018-01-05
          • 1970-01-01
          相关资源
          最近更新 更多