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
Ответы
Ответ 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.