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

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

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

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

这是吸引力模型和类方法“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 

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

   

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

 Architecture Art Fashion Music [#, #, #, #] 

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

 Architecture Art Fashion Music 

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

感谢任何帮助。

 # Change this line with an =: <%= @categories.each do |c| %> # ...to this: <% @categories.each do |c| %> 

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

这是因为这是你做的事情

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

它创建一个吸引对象,其属性由您的字段定义。 你可以做

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