来自 collection_select 的选项在提交时创建一个新选项 - Rails 5
Option from collection_select creates a new one on submit - Rails 5
今天我一直在研究我的插件和类别之间的 HABTM 关联。我几乎可以正常工作了,但是 运行 遇到了 collection_select
.
的麻烦
我的表单中有一个 select,我成功调用了所有现有类别,但是当我提交表单时,会创建一个新类别。例如我select类别合成器。提交的时候突然多了两个类,叫Synthesizer。我怎样才能使插件与类别关联,但不创建新插件?
这是我表单中的代码:
<%= f.fields_for :categories do |c| %>
<%= c.label :name %>
<%= c.collection_select :name, Category.order(:name), :name, :name, multiple: true, include_blank: true %>
<% end %>
这就是我设置强参数的方式:
def plugin_params
params.require(:plugin).permit(:name, :url, :image, :description, :categories_attributes => [:id, :name])
end
在我的插件模型中:
has_and_belongs_to_many :categories
accepts_nested_attributes_for :categories
如果您错过了上下文,请告诉我。非常感谢您的帮助! :)
一个真正常见的新手误解是您需要嵌套属性来分配关联。
嵌套属性用于从与插件相同的形式创建全新类别(或编辑现有类别),通常最好避免使用。
请记住,categories_plugins
连接 table 上的类别和行之间存在巨大差异。你想创建后者。
您真正需要做的就是使用由 has_and_belongs_to_many
.
创建的 _ids
setter / getter
class Plugin
has_and_belongs_to_many :categories
end
<%= form_with(model: @plugin) do |f| %>
# ...
<%= c.collection_select :category_ids, Category.order(:name), :id, :name, multiple: true, include_blank: true %>
# ...
<% end %>
def plugin_params
params.require(:plugin).permit(:name, :url, :image, :description, category_ids: [])
end
category_ids=
setter 将自动处理 inserting/deleting 行到 categories_plugins 连接 table 中。
今天我一直在研究我的插件和类别之间的 HABTM 关联。我几乎可以正常工作了,但是 运行 遇到了 collection_select
.
我的表单中有一个 select,我成功调用了所有现有类别,但是当我提交表单时,会创建一个新类别。例如我select类别合成器。提交的时候突然多了两个类,叫Synthesizer。我怎样才能使插件与类别关联,但不创建新插件?
这是我表单中的代码:
<%= f.fields_for :categories do |c| %>
<%= c.label :name %>
<%= c.collection_select :name, Category.order(:name), :name, :name, multiple: true, include_blank: true %>
<% end %>
这就是我设置强参数的方式:
def plugin_params
params.require(:plugin).permit(:name, :url, :image, :description, :categories_attributes => [:id, :name])
end
在我的插件模型中:
has_and_belongs_to_many :categories
accepts_nested_attributes_for :categories
如果您错过了上下文,请告诉我。非常感谢您的帮助! :)
一个真正常见的新手误解是您需要嵌套属性来分配关联。 嵌套属性用于从与插件相同的形式创建全新类别(或编辑现有类别),通常最好避免使用。
请记住,categories_plugins
连接 table 上的类别和行之间存在巨大差异。你想创建后者。
您真正需要做的就是使用由 has_and_belongs_to_many
.
_ids
setter / getter
class Plugin
has_and_belongs_to_many :categories
end
<%= form_with(model: @plugin) do |f| %>
# ...
<%= c.collection_select :category_ids, Category.order(:name), :id, :name, multiple: true, include_blank: true %>
# ...
<% end %>
def plugin_params
params.require(:plugin).permit(:name, :url, :image, :description, category_ids: [])
end
category_ids=
setter 将自动处理 inserting/deleting 行到 categories_plugins 连接 table 中。