【问题标题】:Ruby / Rails - .each Iterator is printing entire array at the end of the loop [duplicate]Ruby / Rails - .each 迭代器在循环结束时打印整个数组[重复]
【发布时间】:2011-05-03 04:42:03
【问题描述】:

我认为我正在尝试做的事情非常简单,我真的不确定为什么这不起作用。我正在使用 Rails 3。

基本上,我只是想从现有模型的列中选择不同的值,然后将它们全部打印出来。在大多数情况下,这是可行的,但我认为 .each 循环也会在循环结束时打印整个数组。 (

我有一个名为 Attractions 的模型,每个景点都有一个 Category(为了简单起见,现在 Category 在 DB 中被硬编码)。

这是吸引力模型和定义的类方法“all_categories”...

class Attraction < ActiveRecord::Base

  def self.all_categories
    Attraction.select("DISTINCT category")
  end

end

这是景点控制器

class AttractionsController < ApplicationController
  def index
    @categories = Attraction.all_categories
    @attractions = Attraction.find(:all)
  end

  def show
    @attraction = Attraction.find(params[:id])
  end
end

在我看来,这是造成麻烦的代码 - 不是火箭科学,只是一个简单的迭代器,...

  <%= @categories.each do |c| %>
    <%= c.category %><br/>
  <% end %>

很简单,对吧?这一切都运行良好,但这是我在运行该代码段时看到的:

Architecture
Art
Fashion
Music
[#<Attraction category: "Architecture">, #<Attraction category: "Art">, #<Attraction category: "Fashion">, #<Attraction category: "Music">]

为什么要打印最后的数组?我想要的只是一个类别列表:

Architecture
Art
Fashion
Music

显然,我是 Ruby/Rails 的新手,我已经尝试到处寻找解决方案。我有什么明显的遗漏吗?

感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:
    # Change this line with an =:
    <%= @categories.each do |c| %>
    # ...to this:
    <%  @categories.each do |c| %>
    

    您只希望对 #each 方法的块产生副作用,而不希望对返回值进行插值。

    【讨论】:

    • 遇到了同样的问题,最后放弃了,用谷歌搜索了我的问题,希望能出现一个 stackoverflow 线程。这解决了我的问题。就我而言,我使用的是 HAML,因此将“=”更改为“-”解决了我的问题。谢谢
    【解决方案2】:

    这是因为当你这样做时会发生这种情况

    def self.all_categories
      Attraction.select("DISTINCT category")
    end
    

    它创建一个具有由您的字段定义的属性的景点对象。你可以这样做

    def self.all_categories
      Attraction.select("DISTINCT category").map(&:category)
    end
    

    【讨论】:

    • 这也有效,尽管我必须同时实施 DigitalRoss 建议的解决方案以避免最后打印数组。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2012-10-28
    • 2011-07-04
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多