Раскрывающийся список таблиц Rails - PullRequest
13 голосов
/ 12 марта 2009

Мне нужно иметь выпадающий список, в котором пользователь выбирает день недели, в которую он хочет приходить каждую неделю. Значения никогда не изменятся правильно. Это просто воскресенье, понедельник, суббота, верно? Кажется, нужно больше работы, чем нужно, чтобы составить таблицу и указать дни недели. Мне, конечно, не нужна возможность создавать, обновлять или удалять их. Есть ли простой способ справиться с чем-то вроде этого? Или, может быть, вместо дней недели это может быть статус: выключен, парковаться, задний ход, нейтрально, ехать. Главное, что значения никогда не изменятся. Их всего несколько. Так зачем делать стол? Я думаю, что есть способ создать модель, в которой уже есть данные, но я могу ошибаться.

Ответы [ 3 ]

28 голосов
/ 12 марта 2009

Зачем создавать модель? Просто используйте select.

DAYS = ['Monday', 'Tuesday', 'Wednesday', ...]
select(:event, :day, DAYS)

Обычно лучше поместить константу в соответствующую модель и использовать ее оттуда.

В вашей модели:

class Event < ActiveRecord::Base
  DAYS = ['Monday', 'Tuesday', 'Wednesday', ...]
end

и затем, по вашему мнению:

select(:event, :day, Event::DAYS)

и вот еще один трюк, которым я часто пользуюсь:

select(:event, :day, Event::DAYS.collect {|d| [d, Event::DAYS.index(d)]})
9 голосов
/ 14 марта 2009

Обратите внимание, что в Ruby уже есть английские названия дней недели, уже встроенные в класс дат. Вы должны попытаться использовать это, если можете. Вот этот rdoc .

Тогда, как Кэн предложил, просто сделайте следующее:

select(:event, :day, Date::DAYNAMES)

Имейте в виду, что это решение НЕ особенно дружелюбно. Если проблема с i18n, я бы также воспользовался плагином локализованных дат и изменениями, внесенными в Rails 2.2 для поддержки i18n.

6 голосов
/ 12 марта 2009

Попробуйте это:

<%= select_tag(:week_day, options_for_select([['Sunday', 'Sun'], ['Monday', 'Mon'], ...])) %> 

См. http://guides.rubyonrails.org/form_helpers.html#theselectandoptionstag

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...