Как перебрать несколько результатов модели в Rails 3? - PullRequest
0 голосов
/ 09 ноября 2010

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

Я просто немного стреляю, но у меня есть две модели: «Пост» и «Категория». Я пытаюсь получить список категорий из базы данных и перечислить их по имени.

class Post < ActiveRecord::Base
   has_and_belongs_to_many :categories  
end

class Category < ActiveRecord::Base
   has_and_belongs_to_many :posts  
end

# get all categories and output the names
cats = Category.all
cats.each do |cat|
   cat.name
end

Вместо этого, похоже, выводится весь массив найденных результатов. Все результаты, даже не тот, который я повторяю. Что дает?

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Куда вы кладете этот код цикла .each? Где находится «выходной» код, на который вы ссылаетесь? Если вы используете цикл в представлении, убедитесь, что вы используете

<% %>

а не

<%= %>

для самих линий цикла. Как в:

<% Category.all.each do |cat| %>
  <%= cat.name %>
<% end %>
0 голосов
/ 09 ноября 2010

Category.all возвращает массив всех объектов Category, который является всем, что содержит таблица категорий.кошки, следовательно, массив всех категорий.Я не уверен, почему ты думаешь, что перебираешь «один» из всего.Чтобы получить один результат, вы можете использовать find() или first:

cat = Category.first
puts cat.name

Если вам нужны все имена, вы можете сделать это:

Category.all.map(&:name)

или, немногоболее эффективно, особенно если есть много полей:

Category.all(:select => :name).map(&:name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...