45

一部のモデルに管理者を提供するためにActiveAdminを使用しています。それらの1つにカスタマイズされた新しいフォームを提供する必要がありますが、編集フォームはActiveAdminによって提供されるデフォルトのままにしておきます。これが私が持っているものです。それは私が望む新しいフォームを私に与えるという点で機能しますが、編集フォームも新しいフォームを使用しています。これは私が望むものではありません。

ActiveAdmin.register Document do
  form :partial => 'form'
end

これを試しましたが、「new」が未定義のメソッドであるというエラーが表示されます。

ActiveAdmin.register Document do
  new do
    form :partial => 'form'
  end
end
4

5 に答える 5

98

新しいフォームの特定のフィールド(たとえば、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

これにより、メンバーが最初に作成されたときにパスワードが自動的に生成された場合に、新しいメンバーを作成するときにパスワードフィールドが非表示になります。

于 2011-12-08T22:06:01.257 に答える
10

ビュー内のいくつかのロジックを使用してそれを行う方法を考え出しました。確かに最善の方法ではありませんが、より良い方法が見つかるまで、私が望むことを実行します。これが私が使用しているロジックです:

<% if controller.action_name == 'new' %>
new form
<% else %>
edit form
<% end -%>
于 2011-07-18T13:02:15.573 に答える
2

で直接実行できるかどうかはわかりませんformコードを見ると、最後の呼び出しのみが考慮されていることがわかります。一方、次のようなことを試すことができます。

config.set_page_config :new do
  form :partial => 'form'
end

しかし、私はむしろ開発者にこの機能を求めたいと思います。

于 2011-08-30T23:37:31.937 に答える
1

誰かが新しいページと編集ページに異なるパーシャルをレンダリングしたい場合は、次のことを行う必要があります。

#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 %>
于 2016-02-17T10:09:10.260 に答える
0

新しいフォームとして機能するカスタムページを作成し、そこに任意のフォームコードを含む部分をレンダリングすることができます。

したがって、管理ディレクトリに、次のファイル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

次に、任意の形式的なフォームをに入れ、admin/documents/custom_form任意のコントローラーアクションをcollection_actionに入れますadmin/documents

したがって、基本的には、activeadminフレームワーク内で通常のrailsタイプのものを実行します。

于 2012-08-23T04:53:56.090 に答える