каждый цикл в рубине не работает - PullRequest
1 голос
/ 08 апреля 2011

У меня очень простой каждый цикл, написанный на Ruby:

params[:category].each do |i|
  cat = Category.find(i)
  string << cat.name
end

Странная проблема в том, что он проходит этот цикл только один раз!

params[:category] должен быть массивомиз параметров, которые все вошли под меткой категории, верно?

это было сгенерировано с помощью тега выбора в контроллере:

<%=select_tag "category", options_from_collection_for_select(@category,"id" , "name"),:multiple => true, :class=>"bbFormSelect",:id=>"select_category", :name => "category" %>

Дайте мне знать, если вы видите, что не так!

Ответы [ 3 ]

6 голосов
/ 08 апреля 2011

Вы всегда можете проверить содержимое переменной, вручную зарегистрировав ее следующим образом:

logger.info(params[:category])

Это будет работать со всех контроллеров.

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

@categories = Category.find(params[:category])
names = @categories.map(&:name).join

Если метод find получает массив идентификаторов, а не просто идентификатор, он возвращает массив категорий.

3 голосов
/ 08 апреля 2011

Используйте <%= debug params[:category] %> где-то в своем представлении, чтобы увидеть, каково содержание опубликованных параметров. Если цикл выполняется один раз, то в категориях есть одна запись.

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

1 голос
/ 08 апреля 2011

Если вы хотите, чтобы Rails создавал вам массив категорий из входных параметров, измените имя вашего ввода на категорию [], например так:

<%=select_tag "category", options_from_collection_for_select(@category,"id" , "name"),:multiple => true, :class=>"bbFormSelect",:id=>"select_category", :name => "category[]" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...