У меня возникают трудности с пониманием того, как я должен построить свое представление, чтобы гарантировать, что обновление модели моего проекта также обновляет соответствующие связанные записи
У меня есть следующие модели: Project, User и AuthorisedUser
Каждый проект имеет список авторизованных пользователей, которым разрешен доступ, и выбор авторизованных пользователей осуществляется из раскрывающегося списка выбора всех пользователей в представлении редактирования проекта.Я стремлюсь использовать как можно больше "магии" Rails, поэтому я понимаю, что для того, чтобы метод project.update имел дело с сохранением коллекции authorised_users для проекта, мне нужны следующие ассоциации:
(Project Model)
has_many :authorised_users
has_many :users, through: :authorised_users
accepts_nested_attributes_for :authorised_users
(User Model)
has_many :authorised_users
has_many :projects, through: :authorised_users
(Authorised User Model)
belongs_to :project
belongs_to :user
Что мне трудно понять, так это то, как построить мое представление таким образом, чтобы авторизованные пользователи (т.е. те, которые выбраны из списка всех пользователей) отображались так, как требуется в параметрах, представляемых контроллеру.Я думаю, что мне нужно как-то включить ссылку на модель AuthorisedUser, но я смог найти только примеры этого, где используется помощник fields_for, например:
= project_form.fields_for :authorised_users do |auf|
- selected = @project.authorised_users
= auf.label :user_id, 'Authorised Users'
= auf.collection_select('authusers', User.all, :id, :username, {:prompt => 'Blah', :selected => selected}, {multiple: true, class: 'form-control'})
Хотя это приводит кпоявление authorised_user_attributes в параметрах контроллера, это не совсем верно, поскольку блок (очевидно) будет повторять выбор для каждого авторизованного пользователя - я просто хочу, чтобы появилось одно поле выбора, из которого выбранные пользователи могут быть сохранены как «авторизованные»против проекта
Возможно, это не так сложно, как мне кажется, но я был бы признателен за некоторую ясность в отношении лучшего подхода, например:
Может ли Rails сделать это бездействием как частьproject.update, или я должен перебирать коллекцию authorised_users в контроллере проекта, обновляя вручную связанные записи?