2010-05-06 2 views
0

Итак, у меня есть эта форма для создания расписаний, где есть куча полей, а один из них - времена года. В таблице сезонов есть поле под названием 'is_current', которое, если установлено в 1, сообщает нам, что это текущий сезон. Когда отображается форма создания, я хочу, чтобы текущий сезон был выбран по умолчанию в раскрывающемся сезоне. Любая помощь будет оценена. Благодарю.ActiveScaffold: как установить значение по умолчанию для выпадающего списка?

+0

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

+0

Разве вы не можете просто изменить его на вид, который у вас есть? Или вы говорите о многих взглядах? –

+0

Представления динамически генерируются. Нет файлов .rhtml или .erb. ActiveScaffold требует настройки в контроллере для сгенерированных представлений. –

ответ

0

Я считаю, что это будет что-то вроде

#controller 
@seasons = Season.all  
@current_season = seasons.detect{ |s| s.is_current==true } 

#view  
select('schedule', 'season_id', @seasons.collect{ |s| [s.name, s.id] }, 
     :selected => @current_season) 

Редактировать

Извините за недоразумение ... Я хотел бы попробовать что-то вроде следующего:

Создать named_scope на Season модели

named_scope :current, :conditions => "is_current = true" 

и попытаться установить этот параметр

config.columns[:seasons].options = {:selected => Season.current} 

Я не знаю, работает ли он. Это просто выстрел.

+0

Вы не должны делать вызовы модели в представлениях. – vonconrad

+0

Я действительно сказал, чтобы сделать вызов в представлении, но я укажу –

0

Вы можете использовать атрибут :selected в методе формы select, хотя это будет ожидать значение тега option. Давайте сделаем простой выпадающий список, который имеет идентификатор сезона в качестве значения параметра, название сезона как то, что пользователь видит и конкретную запись выбирается по умолчанию, например:

<option value="123" selected="selected">Name of season</option> 
<option value="234">Another season</option> 

В этом случае, :selected атрибут будет ожидать 123, так что он знает, чтобы сделать его значением по умолчанию.

Вы можете сделать это с помощью следующего кода:

Контроллер:

@seasons  = Season.all 
@current_season = @seasons.detect{|s| s.is_current == 1}.id 

View (в form_for заявлении):

<%= f.select :season_id, @seasons.collect {|s| [s.name, s.id]}, :selected => @current_season %> 
0

Я нашел решение. Вы должны добавить фрагмент кода в соответствующий вспомогательный файл, в моем случае - schedules_helper.rb.

def seasons_list 
    s = Season.find(:all, :order => 'is_current DESC').map{|t| [t.name, t.id]} 
end 

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

Спасибо всем за ваши ответы.

Смежные вопросы