Подтвердить что ты не робот

Active Admin: настройка только новой формы

Я использую Active Admin, чтобы предоставить администратору некоторые модели. Мне нужно предоставить индивидуальную новую форму для одного из них, но оставить форму редактирования по умолчанию предоставленной Active Admin. Вот что у меня есть. Он работает в том, что он дает мне новую форму, которую я хочу, но форма редактирования также использует новую форму, чего я не хочу:

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

Я пробовал это, но он дает ошибку, что "новый" - это метод undefined:

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

Ответ 1

Я понял способ сделать это с некоторой логикой в ​​представлении. Не самый лучший способ, конечно, но он делает то, что я хочу, пока не пойму лучший способ. Вот логика, которую я использую:

<% if controller.action_name == 'new' %>
new form
<% else %>
edit form
<% end -%>

Ответ 2

Если вы просто хотите скрыть или показать определенные поля в новой форме (например, поле, которое вы создаете автоматически в модели, используя 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

Это скроет поля пароля при создании нового члена в случае, когда вы автоматически генерируете пароли при первом создании элемента.

Ответ 3

Я не уверен, что это можно сделать непосредственно с помощью form. Если вы посмотрите на code, вы увидите, что учитывается только последний звонок. С другой стороны, вы можете попробовать что-то вроде:

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

Но я бы попросил разработчиков эту функцию.

Ответ 4

Если кто-то хочет отображать разные частичные для новых и редактируемых страниц, вы должны:

#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 %>

Ответ 5

Вы можете создать настраиваемую страницу, которая будет действовать как новая форма, сделать там частичную копию, которая содержит произвольный код формы.

Итак, в вашем каталоге администратора вы создаете файл 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 и произвольное действие контроллера aka collection_action в admin/documents.

Таким образом, в основном для обычного типа рельсов в рамках activeadmin.