如何解决Ruby on Rails中的多对多关系,无法使用“多个选择字段”创建多个记录
我在两个模型(区域和清单)之间有很多关系。我正在尝试在“列表”表单上使用fields_for,以便多选Region并为每个选定Region创建一个Regionalization行。
我只需一次输入就可以创建区域化连接,但无法在下面进行多选操作。
任何线索都很好。谢谢。我想我需要在区域化表单中为每个选定区域的创建方法中创建一个循环。
列表模型
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的一个非常老的vid以及Steve Polito的一个更新版本的帮助下,我实现了解决方案。上面的设置实际上允许我在表单中添加多个区域。我只需要使用控制器来遍历build方法。
3.times { @listing.regionalization.build }
这向我显示了我可以添加三个区域,它们将在提交表单时独立创建。一旦工作,
我知道我需要添加破坏每个表单输入并最终创建一些JavaScript的功能。一旦知道了这一点,我就知道我也可以使用Javascript添加一个新字段,并且可以删除上面代码中的初始循环,因为用户现在可以添加和销毁区域化字段。
此链接是史蒂夫(Steve)的极大帮助,很高兴看到这种方法,而无需在嵌套字段中使用gem'cocoon'或类似符号。
http://railscasts.com/episodes/196-nested-model-form-part-1
https://stevepolito.design/blog/create-a-nested-form-in-rails-from-scratch/
Steve也为此提供了非常清晰的解决方案,并且还提供了出色的脚本以及与Rails 6一起使用。谢谢大家。
我希望这对可能遇到它的人有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。