Ответ 1
# Change this line with an =:
<%= @categories.each do |c| %>
# ...to this:
<% @categories.each do |c| %>
Вы хотите только побочные эффекты на блоке #each
метод, вы не хотите интерполяции возвращаемого значения.
Я думаю, что то, что я пытаюсь сделать, довольно просто, и я действительно не знаю, почему это не работает. Я использую 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, и я попытался найти решение для всего этого. Есть ли что-то очевидное, что мне не хватает?
Оцените любую помощь.
# 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
Создает объект Attraction с атрибутом, определяемым вашим полем. Вы можете сделать
def self.all_categories
Attraction.select("DISTINCT category").map(&:category)
end