给出以下设置(当前不起作用)
class Employee < ActiveRecord::Base
end
class Manager < Employee
end
ActiveAdmin.register Employee do
form do |f|
f.input :name
f.input :joining_date
f.input :salary
f.input :type, as: select, collection: Employee.descendants.map(&:name)
end
end
我希望为所有员工提供一个“新”表格,并能够在表格中选择员工的 STI 类型。
我能够按预期看到“类型”的选择框,但是当我点击“创建”按钮时,出现以下错误:
ActiveModel::MassAssignmentSecurity::Error in Admin::EmployeesController#create
Can't mass-assign protected attributes: type
现在,我知道了受保护属性在 Rails 中的工作方式,并且我有一些解决方法,例如定义Employee.attributes_protected_by_default
但这会降低安全性并且过于黑客行为。
我希望能够使用 ActiveAdmin 中的某些功能来执行此操作,但我找不到。我不想创建自定义控制器操作,因为我展示的示例是高度简化和人为的。
我希望 ActiveAdmin 生成的控制器能够以某种方式识别type
and do Manager.create
代替Employee.create
有人知道解决方法吗?
您可以自己定制控制器。读有关自定义控制器的 ActiveAdmin 文档 http://activeadmin.info/docs/8-custom-actions.html#modify_the_controller。这是一个简单的例子:
controller do
alias_method :create_user, :create
def create
# do what you need to here
# then call create_user alias
# which calls the original create
create_user
# or do the create yourself and don't
# call create_user
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)