Ruby on rails RubyonRails中的多对多关系,无法使用多个选择字段创建多个记录
我在这两个模型之间有一种多对多的关系(Region和Listing)。我试图在列表表单上使用字段_,以便多选择区域,并为每个选定区域创建一个区域化行 我可以通过单个输入创建区域化连接,但无法在下面的multi-select中实现 任何线索都很好。谢谢我猜我需要在created方法中为区域化表单中的每个选定区域创建一个循环 上市模式Ruby on rails RubyonRails中的多对多关系,无法使用多个选择字段创建多个记录,ruby-on-rails,many-to-many,accepts-nested-attributes,Ruby On Rails,Many To Many,Accepts Nested Attributes,我在这两个模型之间有一种多对多的关系(Region和Listing)。我试图在列表表单上使用字段_,以便多选择区域,并为每个选定区域创建一个区域化行 我可以通过单个输入创建区域化连接,但无法在下面的multi-select中实现 任何线索都很好。谢谢我猜我需要在created方法中为区域化表单中的每个选定区域创建一个循环 上市模式 has_many :regionalizations has_many :regions, through: :regionalizations acce
has_many :regionalizations
has_many :regions, through: :regionalizations
accepts_nested_attributes_for :regionalizations
区域模型
has_many :regionalizations
has_many :listings, through: :regionalizations
区域化模式
belongs_to :region
belongs_to :listing
accepts_nested_attributes_for :region
列表控制器
def new
@listing = Listing.new
@listing.regionalizations.build
end
def create
@listing = Listing.new(listing_params)
@listing.user_id = current_user.id
if @listing.save
redirect_to @listing, notice: "Your Listing was created successfuly"
else
render :new
end
end
def listing_params
params.require(:listing).permit(:name, :excerpt, :description, :email, :website, :phone_number, :user_id, :featured_image, :category_id, :regionalization_id,regionalizations_attributes: [:id, :region_id, :listing_id], regions_attributes: [:id, :name])
end
上市表格
<%= form.fields_for :regionalizations do |regionalization_form| %>
<%= regionalization_form.collection_select(:region_id, Region.all, :id, :name, {multiple: true}, {class: 'form-control'}) %>
<% end %>
因此,经过一番挖掘,在瑞安·贝茨(Ryan Bates)的一段非常老的视频(Steve Polito的更新版本)的帮助下,我意识到了解决方案。上面的设置实际上允许我在表单中添加多个区域化。我只需要使用控制器来循环构建方法
3.times { @listing.regionalization.build }
这表明我可以添加三个区域化,它们将在提交表单时独立创建。一旦工作
我知道我需要添加销毁每个表单输入的功能,并最终创建一些javascript来实现这一点。一旦我有了这个,我知道我也可以使用Javascript添加一个新字段,并且可以删除上面代码中的初始循环,因为用户现在可以添加和销毁区域化字段
这个链接是steve的一个很大的帮助,很高兴看到这样做而不使用gem'cocoon'或类似的嵌套字段
Steve为此提供了一个非常清晰的解决方案,并且还提供了很棒的脚本&同时使用Rails6。谢谢大家
我希望这能帮助任何可能遇到它的人