【发布时间】:2019-01-22 13:17:38
【问题描述】:
我很难理解我应该如何构建我的视图以确保我的项目模型的更新也会更新相应的相关记录
我有以下模型:项目、用户和授权用户
每个项目都有一个允许访问的授权用户列表,授权用户的选择是从项目编辑视图中所有用户的下拉选择列表中进行的。 我热衷于尽可能多地利用 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 集合,手动更新相关记录?
【问题讨论】:
标签: ruby-on-rails