Rails ActiveAdmin - 在 link_to new 中传递多态关联参数

Rails ActiveAdmin - pass polymorphic association parameters in link_to new

我是 ActiveAdmin 的新手,我遇到了这个问题:

我有两个模型:图片和内容。图片通过多态关联有很多内容

我成功地使图片 show 中的按钮 "Create content" 页面通过 contentable_type 并且图片 ID 在 new_admin_content 请求中作为参数使用 new_admin_content 中的以下内容 app/admin/picture.rb :

action_item :new, only: :show do
  link_to "Add content", new_admin_content_path(contentable_type: "Picture", contentable: picture)
end

并接收参数,我在 app/admin/content.rb 中编写了以下内容:

permit_params :list, :of, :attributes, :on, :model, :contentable, :contentable_type

form do |f|
  f.object.contentable_type = params[:contentable_type]
  f.object.contentable = params[:contentabl]
  puts f.object.contentable_type
  puts f.object.contentable
  f.inputs "Details" do
    .
    .
    .
  end
  actions
end

但在这种情况下,我得到这个错误:

NoMethodError in Admin::Contents#new

undefined method `primary_key' for String:Class

错误由行f.object.contentable = params[:contentable]

触发

当我仅将 contentable_type 传递给 f.object 而未传递 contentable 时,f.object 会在其字段中保存 contentable_type,但提交表单不会创建一个新记录。

如何将 contentable 保存在其表单字段中并成功地对表单提交进行 create 操作?

通过将 f.object.contentable = params[:contentabl] 更改为 f.object.contentable_id = params[:contentabl](如数据库中的列名)并将所有表单参数添加到 permitted params

来解决问题