0

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

admin/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 リソースを維持することです。完全に乾燥していません。この状況であなたがしたことを共有してください。

ジョン

4

1 に答える 1

1

私はこれを試していませんが@object、コントローラーで変数を定義できます:

controller do
    before_filter :set_object, :only => [:new, :edit]
    ....
    def set_object
        @object = MaleModel.find(params[:id]) rescue MaleModel.new
    end
end

そして、フォームをレンダリングして、orの@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 %>
于 2012-09-27T17:24:56.200 に答える