gpt4 book ai didi

ruby-on-rails - 如何通过具有 has_many through 关系的 Controller 提交 collection_check_box?

转载 作者:行者123 更新时间:2023-12-04 06:31:43 24 4
gpt4 key购买 nike

Im on rails 4. 我有三个模型,Blends、Addons 和 AddonPairings。用户创建混合和

Blend
have_many :addon_pairings
have_many :addons, through: :addon_pairings

Addon
have_many :addon_pairings
have_many :blends, through: :addon_pairings

AddonPairing
belong_to :blend
belong_to :addon

我的插件都是在数据库中预制的,供用户选择任意数量的插件。

在我的 new.html.erb 中用于我的混合

<%= form_for [current_user, @blend] do |f| %>

<div class="form-group">
<%= f.label :addons, "Add some addons to your blend" %>
<%= f.collection_check_boxes :addon_ids, Addon.all, :id, :name %>
</div>

<div class="form-group">
<%= f.submit class: "btn btn-lg btn-primary" %>
</div>
<% end %>

我的混合 Controller

def create
@user = User.find(params[:user_id])
@blend = @user.blends.build(blend_params)
if @blend.save
redirect_to @user, notice: "Your blend has been created."
else
flash.now[:notice] = "Something went wrong. Please check the errors below."
render 'new'
end
end
private

def blend_params
params.require(:blend).permit(:name, :addon_ids)
end

如何让我的 Controller 在我的 addon_pairings 表中创建记录,将混合与所选插件连接起来?谢谢。

最佳答案

你实现得很糟糕。

您需要使用“accepts_nested_pa​​rameters”来执行此操作。

这样,您将使用 fields_for 标记创建一个“表单中的表单”,该表单实际上在另一个模型中创建字段,使该条目由触发 Controller 并生成主表单的当前对象拥有。因此,由于您的 collection_check_box 创建的对象属于当前对象,但在另一个模型中,它需要位于一个 block 内,例如(仅举个例子):

<%= fields_for @owner.belonged_name %>
<%= collection_check_box %>
<% end %>

我建议您通过 railscasts.com/episodes/196-nested-model-form-part-1 和此链接 ( http://www.createdbypete.com/articles/working-with-nested-forms-and-a-many-to-many-association-in-rails-4/ ) 了解嵌套参数的原理。

请注意,由于不推荐使用 attr_params,因此您也必须允许 Controller 上的属性。

希望对您有所帮助。

关于ruby-on-rails - 如何通过具有 has_many through 关系的 Controller 提交 collection_check_box?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com