has_many的复选框,带有其他连接表属性

时间:2017-09-21 15:06:10

标签: ruby-on-rails reform trailblazer

我在某些模型之间有has_many :through关联,用于确定哪些数据集在某些信息中心上可见。

class Dashboard < ActiveRecord::Base
  has_many :dashboard_datasets
  has_many :datasets, :through => :dashboard_datasets
end

class DashboardDataaset < ActiveRecord::Base
  belongs_to :dashboard
  belongs_to :dataset
end

class Dataset < ActiveRecord::Base
  has_many :dashboard_datasets
  has_many :dashboards, :through => :dashboard_datasets
end

创建新Dashboard的表单会有一组名为dataset_ids[]的简单复选框,以便您选择我想要显示的预先存在的数据集仪表板。

class DashboardForm < Reform::Form
  model: :dashboard

  property :name
  property :description
  collection :dataset_ids
end

到目前为止,这么简单......

但是,我现在希望在联接表中添加额外的关联,以确定&#39;布局&#39;应该用于该给定仪表板上的该数据集。即网格,表格,列表。等

class Layout < ActiveRecord::Base
  has_many :dashboard_datasets
end

class DashboardDataaset < ActiveRecord::Base
  belongs_to :dashboard
  belongs_to :dataset
  belongs_to :layout
end

我现在想调整我的仪表板表单,这样除了复选框之外,对于所选的每个数据集复选框,还有一个选择框供我选择要在此给定关联上使用的布局。

我从哪里开始?展开表单对象上的collection以更丰富并包含更多信息?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

Found a good example here

0k32

关键信息包括:

  • 设置标准的has_many关联,工厂 - &gt; factory_color - &gt;颜色
  • 在factory_color上使用accepts_nested_attributes_for
  • 创建临时模型列表,每个复选框都有一个模型。 (factory.all_colors)
  • 使用您可以传递关联的fields_for功能,以及单独的模型列表,例如fields_for:factory_colors,@ factory.all_colors do | fc | ...
  • 在控制器中添加一个before过滤器,为未检查的项目设置_destroy属性。