一部のモデルに管理者を提供するためにActive Adminを使用しています。そのうちの1つにカスタマイズした新しいフォームを提供する必要がありますが、編集フォームはActive Adminが提供するデフォルトのままにしておきます。これが私が持っているものです。それは私が欲しい新しいフォームを与えているという点で機能しますが、編集フォームも新しいフォームを使用していますが、これは私が望むものではありません:
ActiveAdmin.register Document do
form :partial => 'form'
end
私はこれを試しましたが、「新しい」は未定義のメソッドであるというエラーが発生します:
ActiveAdmin.register Document do
new do
form :partial => 'form'
end
end
私はビューのいくつかのロジックでそれを行う方法を理解しました。確かに最善の方法ではありませんが、より良い方法を見つけるまでは、私が望むことを行います。これが私が使っているロジックです:
<% if controller.action_name == 'new' %>
new form
<% else %>
edit form
<% end -%>
新しいフォームの特定のフィールド(例:before_createを使用してモデルで自動的に生成するフィールド)を表示または非表示にする場合は、次のようにします。
form do |f|
f.inputs "Member Details" do
f.input :first_name
f.input :last_name
f.input :email
if !f.object.new_record?
f.input :password
f.input :password_confirmation
end
end
f.button :Submit
end
これにより、最初にメンバーが作成されたときにパスワードを自動的に生成する場合に、新しいメンバーを作成するときにパスワードフィールドが非表示になります。
form
で直接実行できるかどうかはわかりません。 code を見ると、最後の呼び出しのみが考慮されていることがわかります。一方、あなたは次のようなことを試すかもしれません:
config.set_page_config :new do
form :partial => 'form'
end
しかし、私はむしろこの機能を開発者に求めたいと思います。
誰かが新しいページと編集ページに異なるパーシャルをレンダリングしたい場合は、次のことを行う必要があります。
#app/admin/document.rb
ActiveAdmin.register Document do
form partial: 'form'
end
#app/views/admin/documents/_form.html.erb
<% if @document.new_record? %>
<%= render partial: "form_new", resource: @document %>
<% else %>
<%= render partial: "form_edit", resource: @document %>
<% end %>
#app/views/admin/documents/_form_new.html.erb
<%= semantic_form_for [:admin, @document], builder: Formtastic::FormBuilder do |f| %>
<%= f.semantic_errors %>
<%= f.inputs do %>
<%= f.input :name %>
<% end %>
<%= f.actions %>
<% end %>
新しいフォームとして機能するカスタムページを作成し、任意のフォームコードを含むパーシャルをそこにレンダリングできます。
したがって、管理ディレクトリにnew_document.rb
を含むファイルを作成します
ActiveAdmin.register_page "New Document" do
content do
panel "Create a new document" do
render :partial => "admin/documents/custom_form", :locals => {document: Document.new}
end
end
end
次に、任意のformtasticフォームをadmin/documents/custom_form
に入れ、任意のコントローラーアクションをcollection_action
をadmin/documents
に入れます。
つまり、基本的には、通常のRails typeadminをactiveadminフレームワーク内で実行します。