ruby-on-rails - Rails ActiveAdmin link_to 内部不同的新模型 - ActiveRecord::AssociationTypeMismatch
问题描述
我有两个带有 ActiveAdmin 面板的模型:
class Portfolio < ApplicationRecord
has_many :portfolio_reports
end
class PortfolioReport < ApplicationRecord
belongs_to :portfolio
end
在Portfolio
面板内,我希望有一个PortfolioReport
为此投资组合创建的按钮(它会将管理员带到具有给定投资组合 ID 的新投资组合报告视图)。
为此,我有以下代码:
# admin/portfolios.rb
ActiveAdmin.register Portfolio do
action_item :portfolio_report, only: :show do
link_to 'Create Report', new_admin_portfolio_report_path(portfolio_id: portfolio.id)
end
end
# admin/portfolio_reports.rb
ActiveAdmin.register PortfolioReport do
permit_params :portfolio_id
includes :portfolio
form do |f|
f.inputs :published_at
tabs do
tab 'Intro content' do
f.inputs do
input :portfolio, as: :hidden
# other inputs
end
end
end
end
这给了我一个错误:
ActiveRecord::AssociationTypeMismatch in Admin::PortfolioReportsController#create
Portfolio(#523620) expected, got "" which is an instance of String(#4100)
我错过了什么?
解决方案
也许这会对某人有所帮助 - 问题出在错误定义的输入表单键上。在里面action_item
我通过了portfolio_id
:
# admin/portfolios.rb
ActiveAdmin.register Portfolio do
action_item :portfolio_report, only: :show do
link_to 'Create Report', new_admin_portfolio_report_path(portfolio_id: portfolio.id)
end
end
这就是 ActiveAdmin 所期望的关键:
# admin/portfolio_reports.rb
form do |f|
f.inputs :published_at
tabs do
tab 'Intro content' do
f.inputs do
**input :portfolio_id, as: :hidden**
# other inputs
end
仍然很奇怪,您不能将整个对象作为参数传递给 link_to 路径,例如new_admin_portfolio_report_path(resource)
. ActiveAdmin DSL 无法处理它。