我认为我要做的事情很简单,我真的不确定为什么这不起作用。我正在使用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
这是我视图中导致问题的代码 - 没有火箭科学,只是一个简单的迭代器,...
<%= @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的新手,我试图搜索一下这个解决方案。有什么明显的东西我不见了吗?
感谢任何帮助。
答案 0 :(得分:72)
# Change this line with an =:
<%= @categories.each do |c| %>
# ...to this:
<% @categories.each do |c| %>
您只想在#each
方法的块上产生副作用,您不希望插值返回值。
答案 1 :(得分:1)
这是因为这是你做的事情
def self.all_categories
Attraction.select("DISTINCT category")
end
它创建一个吸引对象,其属性由您的字段定义。你可以做到
def self.all_categories
Attraction.select("DISTINCT category").map(&:category)
end