Как создать поля формы для ассоциации has_many :through
с дополнительными атрибутами?
Связь has_many :through
имеет дополнительный столбец с именем weight
.
Вот файл миграции для таблицы соединений:
create_table :users_widgets do |t|
t.integer :user_id
t.integer :widget_id
t.integer :weight
t.timestamps
end
Модели выглядят так:
User
has_many :widgets, :through => :users_widgets,
:class_name => 'Widget',
:source => :widget
has_many :users_widgets
accepts_nested_attributes_for :widgets # not sure if this is necessary
Widget
has_many :users, :through => :users_widgets,
:class_name => 'User',
:source => :user
has_many :users_widgets
accepts_nested_attributes_for :users # not sure if this is necessary
UsersWidget
belongs_to :user
belongs_to :widget
Для простоты виджет и пользователь имеют только одно собственное поле с именем name
, следовательно, User.first.name
и Widget.first.name
.
Вопросы:
Как мне добавить раскрывающийся список для виджетов с соответствующим весом в форму создания/редактирования пользователя?
Как я могу динамически добавлять дополнительные формы виджетов к пользователям или формы пользователей к виджетам, чтобы легко добавлять или удалять эти отношения? Драгоценный камень
nested_form_for
кажется идеальным решением, но я не смог заставить его работать.Помимо моделей и частей формы, нужно ли внести какие-либо изменения в мой контроллер?
Краткое примечание. Меня не интересует создание новых виджетов в форме пользователя или новых пользователей в форме виджета, мне нужна только возможность выбирать из существующих объектов.
Я использую Rails 3.1 и simple_form 2.0.0dev для создания форм.