Подтвердить что ты не робот

Ruby/Rails -.each Iterator печатает весь массив в конце цикла

Я думаю, что то, что я пытаюсь сделать, довольно просто, и я действительно не знаю, почему это не работает. Я использую Rails 3.

По сути, я просто пытаюсь выбрать отдельные значения из столбца в существующей модели и распечатать их все. По большей части это работает, но цикл .each, на мой взгляд, также заканчивает печать всего массива в конце цикла. (

Я модель, называемая Attractions, и каждая аттракция имеет категорию (сейчас эта категория жестко закодирована в БД для простоты).

Это Аттракционная модель и метод класса "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, и я попытался найти решение для всего этого. Есть ли что-то очевидное, что мне не хватает?

Оцените любую помощь.

4b9b3361

Ответ 1

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

Вы хотите только побочные эффекты на блоке #each метод, вы не хотите интерполяции возвращаемого значения.

Ответ 2

Это потому, что это происходит, когда вы делаете

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

Создает объект Attraction с атрибутом, определяемым вашим полем. Вы можете сделать

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