ActiveScaffold: как установить значение по умолчанию для выпадающего списка? - PullRequest
0 голосов
/ 06 мая 2010

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

Ответы [ 3 ]

0 голосов
/ 06 мая 2010

Вы можете использовать атрибут :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

Представление (в форме form_for):

<%= f.select :season_id, @seasons.collect {|s| [s.name, s.id]}, :selected => @current_season %>
0 голосов
/ 07 мая 2010

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

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

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

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

0 голосов
/ 06 мая 2010

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

#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}

Я не знаю, работает ли это. Это всего лишь выстрел.

...