2013-12-11 3 views
1

У меня есть вход f.select в моем приложении Rails, который исходит из этого вспомогательного метода.F.select ввод не сохраняет значение при редактировании

def option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method) 
    collection.map do |group| 
    option_tags = options_from_collection_for_select(
     group.send(group_method), option_key_method, option_value_method) 

    content_tag(:optgroup, option_tags, :label => group.send(group_label_method)) 
    end.join.html_safe 
end 

Показано, что на экране показано следующее.

<%= f.select(:type_id, option_groups_from_collection_for_select(@categories, :types, :category, :id, :name)) %> 

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

Вот моя категория модель

has_many :posts 
has_many :types, :order => "name" 

и вот мой типа модель

belongs_to :category 

ответ

4

Вы должны предоставить 5-аргумент, который является выбранным ключом. Попробуйте следующий код:

<%= f.select(:type_id, option_groups_from_collection_for_select(@categories, :types, :category, :id, :name, f.object.type_id)) %> 

f.object.type_id возвращает атрибут TYPE_ID объекта передается в виде, если он есть. В противном случае это будет ноль и не будет выбрано ничего.

+0

Спасибо @Gjaldon! Это работает отлично! Для тех, кто видит это, вам также нужно добавить выбранную кнопку в свой вспомогательный метод –

0

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

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