Ruby on rails 在主模型的窗体中创建多个子模型

Ruby on rails 在主模型的窗体中创建多个子模型,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,情况如下: class Activity < ApplicationRecord has_many :activity_amenities end 所以基本上我的活动都有设施。我之所以使用has__很多:通过联想,是因为我想创造基本的便利设施,而每项活动的便利设施都有适合该活动的描述 因此,我想直接在活动的创建/编辑中创建新的便利设施。这幅图应该能很好地说明这一点: 所以当我点击AddAmenity按钮时,它应该会添加新的选择/输入组 然后,当我单击“创建”时,它应该创建所有活动便利

情况如下:

class Activity < ApplicationRecord
  has_many :activity_amenities
end
所以基本上我的活动都有设施。我之所以使用has__很多:通过联想,是因为我想创造基本的便利设施,而每项活动的便利设施都有适合该活动的描述

因此,我想直接在活动的创建/编辑中创建新的便利设施。这幅图应该能很好地说明这一点:

所以当我点击AddAmenity按钮时,它应该会添加新的选择/输入组

然后,当我单击“创建”时,它应该创建所有活动便利设施,并将它们与活动模型关联

你知道该如何在控制器和视图中执行此操作吗?找不到任何东西真的


注:请注意,我使用简单表单gem作为表单

,因为您有许多关联,包括反向选项。然后,在按ID添加ActivityCommercies时,将它们作为数组一次全部传入。e、 g当您创建活动参数时,请传入活动设施ID[]。Rails将使用自动生成的activity\u amountity\u ids=方法为您处理创建

型号:

class Activity < ApplicationRecord
  has_many :activity_amenities, inverse_of: activity
end
class Amenity < ApplicationRecord
  has_many :activity_amenities, inverse_of: amenity
  has_many :activities, through: :activity_amenities
end
class ActivityAmenity < ApplicationRecord
  belongs_to :activity
  belongs_to :amenity
end
视图:无论表单输入的名称是什么

name="activity[activity_amenity_ids][]"
如果你想解释你为什么要传递活动标识,基本上是tl;如果对象不存在,则创建对象,如果对象存在,则不执行任何操作

试试看

Activity.create(name: "Running or whatever", activity_amenity_ids: [1, 2, 3])

看看结果。请注意,如何在单个事务中创建新活动及其关联的活动设施

对于所有的关联,包括选项的逆项。然后,在按ID添加ActivityCommercies时,将它们作为数组一次全部传入。e、 g当您创建活动参数时,请传入活动设施ID[]。Rails将使用自动生成的activity\u amountity\u ids=方法为您处理创建

型号:

class Activity < ApplicationRecord
  has_many :activity_amenities, inverse_of: activity
end
class Amenity < ApplicationRecord
  has_many :activity_amenities, inverse_of: amenity
  has_many :activities, through: :activity_amenities
end
class ActivityAmenity < ApplicationRecord
  belongs_to :activity
  belongs_to :amenity
end
视图:无论表单输入的名称是什么

name="activity[activity_amenity_ids][]"
如果你想解释你为什么要传递活动标识,基本上是tl;如果对象不存在,则创建对象,如果对象存在,则不执行任何操作

试试看

Activity.create(name: "Running or whatever", activity_amenity_ids: [1, 2, 3])

看看结果。请注意,如何在单个事务中创建新活动及其关联的活动设施

酷,让我试试!我刚刚发现:你觉得怎么样?是的,那也很好,更像Rails。如果你用手写的话,我的方法就是没有Rails的魔力。祝你好运,伙计。好了,现在一切都好了。。。我可以直接从活动表单添加/编辑活动设施。我唯一缺少的是“添加便利设施”按钮机械师。。。单击后,应添加一行输入select+input。你知道我怎样才能做到这一点吗?一旦我有了完整的解决方案,我会把它作为一个解决方案发布在下面的工具,让我试试!我刚刚发现:你觉得怎么样?是的,那也很好,更像Rails。如果你用手写的话,我的方法就是没有Rails的魔力。祝你好运,伙计。好了,现在一切都好了。。。我可以直接从活动表单添加/编辑活动设施。我唯一缺少的是“添加便利设施”按钮机械师。。。单击后,应添加一行输入select+input。你知道我怎样才能做到这一点吗?一旦我有了完整的解决方案,我会把它作为一个解决方案张贴在下面