我在Rails 5上完成了这项任务。
我需要"质量"修改Project
及其Members
在用户界面中,我打开一个包含特定成员列表的弹出窗口(User
列表),这些成员已经或不属于Project
(请查看此处的关系)。
我需要能够使用复选框标记其中一些(不属于)或取消标记其他人(属于谁)和"保存"表格和创建/删除关系。
为了记录我有这个模型
// project.rb
class Project < ApplicationRecord
has_many :memberships, dependent: :destroy, class_name: 'ProjectMember'
has_many :members, through: :memberships, class_name: 'User', source: :user
end
// project_member.rb
class ProjectMember < ApplicationRecord
belongs_to :user
belongs_to :project
end
// user.rb
class User < ApplicationRecord
has_many :project_members
has_many :projects, through: :project_members
end
我在Rails上有点新鲜,我真的很喜欢创建表单(使用SimpleForms)以及如何编辑关系。
什么是正确的做法?我试图在网上找不到成功:(
我希望我的问题很清楚:)。
答案 0 :(得分:0)
我认为你想要的助手包含在宝石茧中:https://github.com/nathanvda/cocoon
使用此gem,您对项目版本的看法如下所示:
项目/ _form
= simple_form_for @project do |f|
-# your project fields...
%h3 Members
#members
= f.simple_fields_for :members do |member|
= render 'member_fields', f: member
.links
= link_to_add_association 'add member', f, :members
= f.submit
项目/ _member_fields
.nested-fields
= f.association :user
= link_to_remove_association "remove user from project", f
编辑:我专注于视图部分,但在此之前,在模型中,您必须接受表单中的嵌套属性:
class Project < ApplicationRecord
has_many :memberships, dependent: :destroy, class_name: 'ProjectMember'
has_many :members, through: :memberships, class_name: 'User', source: :user
accepts_nested_attributes_for :members, reject_if: :all_blank, allow_destroy: true
end
在控制器中还有一些工作要做,以允许嵌套属性。
def project_params
params.require(:project).permit(:name, :description, members_attributes: [:id, :user_id, :_destroy])
end