【发布时间】:2019-11-15 16:12:03
【问题描述】:
我有一个配方模型,通过配方设备设置如下:
class Recipe < ApplicationRecord
has_many :recipe_equipment, dependent: :destroy
has_many :equipment, through: :recipe_equipment
accepts_nested_attributes_for :recipe_equipment
end
class Equipment < ApplicationRecord
has_many :recipe_equipment
has_many :recipes, through: :recipe_equipment
end
class RecipeEquipment < ApplicationRecord
belongs_to :recipe
belongs_to :equipment
end
一切都非常简单。然后在我的配方表单中,我使用 select2 并启用了 tags 选项,这是该选项的输入:
<div class="form-group">
<%= form.label :equipment_ids, "Equipment Needed" %>
<%= form.collection_select :equipment_ids, Equipment.all.order(:name), :id, :name, {:selected => recipe.recipe_equipment.map(&:equipment_id)}, { multiple: true } %>
</div>
以及标准的select2初始化:
$('#recipe_equipment_ids').select2({
width: '100%',
maximumSelectionLength: 10,
tags: true});
所以这一切都按预期工作,除了输入新设备时,它作为文本而不是 id 提交(因为尚未创建设备并且没有 ID)
"equipment_ids"=>["", "7", "3", "Wok"]
因此在调用控制器中的创建/更新之前寻找一种处理参数数组的方法,如果新设备不存在则创建新设备。不过不知道该怎么做。
【问题讨论】:
-
应该是
has_many :recipe_equipments和accepts_nested_attributes_for :recipe_equipments。has_manyassociations 应始终为复数形式。 -
设备是设备的复数
-
是的,你的权利。 (捂脸)。
标签: ruby-on-rails jquery-select2