Ruby/Rails - .each Iterator在循环结束时打印整个数组

tar*_*eva 24 ruby ruby-on-rails ruby-on-rails-3

我想我想要做的很简单,我真的不确定为什么这不起作用.我正在使用Rails 3.

本质上,我只是尝试从现有模型中的列中选择不同的值,并将它们全部打印出来.在大多数情况下,这是有效的,但我视图中的.each循环也最终在循环结束时打印整个数组.(

我是一个名为"景点"的模型,每个景点都有一个类别(现在为了简单起见,类别在数据库中是硬编码的).

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

class Attraction < ActiveRecord::Base

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

end
Run Code Online (Sandbox Code Playgroud)

这是吸引控制器

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

  def show
    @attraction = Attraction.find(params[:id])
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我认为造成麻烦的代码 - 没有火箭科学,只是一个简单的迭代器,......

  <%= @categories.each do |c| %>
    <%= c.category %><br/>
  <% end %>
Run Code Online (Sandbox Code Playgroud)

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

Architecture
Art
Fashion
Music
[#<Attraction category: "Architecture">, #<Attraction category: "Art">, #<Attraction category: "Fashion">, #<Attraction category: "Music">]
Run Code Online (Sandbox Code Playgroud)

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

Architecture
Art
Fashion
Music
Run Code Online (Sandbox Code Playgroud)

很明显,我是Ruby/Rails的新手,我试图寻找解决方案.有什么明显的东西让我失踪吗?

感谢任何帮助.

Dig*_*oss 72

# Change this line with an =:
<%= @categories.each do |c| %>
# ...to this:
<%  @categories.each do |c| %>
Run Code Online (Sandbox Code Playgroud)

您只需要#each方法块的副作用,您不希望插值返回值.

  • `<%=`vs` <%`... (5认同)
  • 有这个相同的问题,并最终放弃并搜索我的问题希望stackoverflow线程会出现.这解决了我的问题.在我的情况下,我正在使用HAML,所以将"="更改为" - "解决了我的问题.谢谢 (5认同)