activeadmin 中的 Formtastic:有没有一种方法可以使用 select 输入创建多个连接记录,并为关联模型设置 multiple: true?
Formtastic in activeadmin: Is there a way to create multiple join records with a select input with multiple: true for the associated model?
我见过许多与此类似的问题,但 none 回答得很好。我有一个包含连接模型输入的表单。我已经使用单个输入成功创建了其中的几个,但我正在尝试创建一个用户可以从关联记录的下拉列表中 select 多个并为每个 select 创建连接记录编辑。它不起作用,而且参数似乎正在尝试将所有关联的模型 ID 分配给单个连接记录。
class AdminUser < ApplicationRecord
has_many :admin_locations, dependent: :destroy
has_many :locations, through: :admin_locations
end
class AdminLocation < ApplicationRecord
belongs_to :admin_user
belongs_to :location
end
class Location < ApplicationRecord
has_many :admin_locations, dependent: :destroy
has_many :admin_users, through: :admin_locations
end
#in the admin_users edit form
f.has_many :admin_locations,
allow_destroy: true do |l|
l.input :location_id,
as: :select,
include_hidden: false,
multiple: true,
collection: locs
#in admin/admin_user permitted params
admin_location_ids: [],
admin_locations_attributes: [:id, :location_id, :admin_user_id, :_destroy, :_create, :_update]
我已经通过 admin/ 文件允许了所有参数,但我仍然在回滚时收到错误消息,即 location_id
不是 admin_locations
形式中允许的参数。参数显示所有 selected id 都被分配给单个连接记录:"admin_locations_attributes"=>{"0"=>{"location_id"=>["236", "238", "239", "241"]}}}
有什么方法可以使它工作吗?
哦,哇,谢谢 Ryan Bates。找到了十年前的 rails 回答了这个问题。我把它复杂化了。
这个有效:
f.input :locations,
allow_destroy: true,
as: :select,
include_hidden: false,
multiple: true,
collection: locs
无需在表单中嵌套连接。
我见过许多与此类似的问题,但 none 回答得很好。我有一个包含连接模型输入的表单。我已经使用单个输入成功创建了其中的几个,但我正在尝试创建一个用户可以从关联记录的下拉列表中 select 多个并为每个 select 创建连接记录编辑。它不起作用,而且参数似乎正在尝试将所有关联的模型 ID 分配给单个连接记录。
class AdminUser < ApplicationRecord
has_many :admin_locations, dependent: :destroy
has_many :locations, through: :admin_locations
end
class AdminLocation < ApplicationRecord
belongs_to :admin_user
belongs_to :location
end
class Location < ApplicationRecord
has_many :admin_locations, dependent: :destroy
has_many :admin_users, through: :admin_locations
end
#in the admin_users edit form
f.has_many :admin_locations,
allow_destroy: true do |l|
l.input :location_id,
as: :select,
include_hidden: false,
multiple: true,
collection: locs
#in admin/admin_user permitted params
admin_location_ids: [],
admin_locations_attributes: [:id, :location_id, :admin_user_id, :_destroy, :_create, :_update]
我已经通过 admin/ 文件允许了所有参数,但我仍然在回滚时收到错误消息,即 location_id
不是 admin_locations
形式中允许的参数。参数显示所有 selected id 都被分配给单个连接记录:"admin_locations_attributes"=>{"0"=>{"location_id"=>["236", "238", "239", "241"]}}}
有什么方法可以使它工作吗?
哦,哇,谢谢 Ryan Bates。找到了十年前的 rails 回答了这个问题。我把它复杂化了。
这个有效:
f.input :locations,
allow_destroy: true,
as: :select,
include_hidden: false,
multiple: true,
collection: locs
无需在表单中嵌套连接。