我有 2 个 activeadmin 资源,两者都是模型的子类,使用 STI。例如:
base_model.rb
class BaseModel < ActiveRecord::Base
end
male_model.rb
class MaleModel < BaseModel
end
female_model.rb
class FemaleModel < BaseModel
end
管理员/male_model.rb
ActiveAdmin.register MaleModel do
menu :parent => "Models", :label => "Male Model"
# A big long custom form follows...
form do |f|
f.inputs
f.buttons
end
end
admin/female_model.rb
ActiveAdmin.register FemaleModel do
menu :parent => "Models", :label => "Female Model"
# The SAME big long custom form follows...
form do |f|
f.inputs
f.buttons
end
end
呈现相同表单但创建不同子类(MaleModel或FemaleModel)的记录的正确方法是什么?
我现在正在做的是维护 2 个 activeadmin 资源,其中包含几乎完全相同(庞大)的代码。完全不干。请分享您在这种情况下所做的工作。
John
我没有尝试过这个,但你可以在控制器中定义一个@object
变量:
controller do
before_filter :set_object, :only => [:new, :edit]
....
def set_object
@object = MaleModel.find(params[:id]) rescue MaleModel.new
end
end
然后,您可以呈现表单并使用变量@object
而不是@male_model
或@female_model
。
form :partial => "models/form"
# app/views/models/_form.html.erb
<%= semantic_form_for [:admin, @object] do |f| %>
<%= f.inputs %>
<%= f.actions %>
<% end %>