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

时间:2018-01-25 21:38:58

标签: ruby-on-rails ruby-on-rails-5 activeadmin polymorphic-associations

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

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

我成功制作了按钮"创建内容"从图片show页面使用app / admin / picture.rb中的以下内容将contentable_type和图片ID作为参数传递给new_admin_content请求:

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操作?

1 个答案:

答案 0 :(得分:0)

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

,问题得以解决