2012-07-03 3 views
0

У меня есть модель User, модель Team и модель CoachingRole. Модель CoachingRoles служит для объединения пользователей и команд, потому что между пользователями и командами уже существует одна ассоциация. Соответствующие ассоциации настроены так:Обновление нескольких объектов с помощью select_tag в Rails

Пользователь:

has_many :coaching_roles 
has_many :teams_coaching, :through => :coaching_roles, :source => :team 

Команда:

has_many :coaching_roles 
has_many :coaches, :through => :coaching_roles, :source => :user 

CoachingRole

belongs_to :team 
belongs_to :user 

У меня есть форма для редактирования пользователя и части это добавить команды в CoachingRoles. Вот select_tag, что у меня до сих пор:

= select_tag "user[coaching_role_ids]", options_for_select(@teams.map {|t| [t.name, t.id]})

Эта конкретная линия будет добавить идентификатор команды в пользователя coaching_role_ids, но явно не добавляет обратное. В конце концов я хотел бы добавить :multiple => true к этому и разрешить выбор нескольких команд для добавления в CoachingRoles пользователя. Каков наилучший способ сделать это?

ответ

0

Я использовал это в своей реализации.

Предполагая, что команда имеет атрибут для имени и метод selected_team_ids, который возвращает массив идентификаторов команд, выбранных для этого пользователя.

select_tag ("user[coaching_role_ids][]"), options_from_collection_for_select(Team.all, :id, :name, @user.coaching_role_ids), :multiple => true 

Надеюсь, это поможет!

EDIT: Я отредактировал решение выше, основанное на собственном открытии @ nilmethod. Мое оригинальное решение было:

select_tag ("user[teams][]"), options_from_collection_for_select(Team.all, :id, :name, @user.team_ids), :multiple => true 

Я предполагаю, что мои столы были настроены немного по-другому тогда. Благодаря!

+0

Завершите, но принимаю ответ, поскольку он был почти на месте. Спасибо за подталкивание в правильном направлении. Вот что сработало: '' 'select_tag (« user [coaching_role_ids] [] »), options_from_collection_for_select (Team.all,: id,: name, @ user.coaching_role_ids),: multiple => true' '' – cmhobbs

+0

Отлично, что это помогает , Мое оригинальное решение сработало для меня. Позвольте мне дважды проверить и посмотреть, как мои таблицы и модели настроены, чтобы увидеть, пропустил ли я что-нибудь. – yuklai

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