Форма не работает после использования.
Я пытаюсь использовать метод render внутри моего метода формы activeAdmin, но после вставки
в коде он перестает работать.
form do |f|
f.inputs I18n.t('sale_header') do
f.input :client
f.input :room
end
f.inputs I18n.t('sale_items') do
render :partial => "form_sale"
end
f.inputs I18n.t('totalization') do
f.input :sub_total, :input_html => { :disabled => :true }
f.input :discount
f.input :total_value, :input_html => { :disabled => :true }
end
f.buttons
end
После вставки метода рендеринга на экране отображается только контент form_sale.
Любая помощь?
Спасибо!
Ответы
Ответ 1
Согласно документации, правильный способ настройки формы в active_admin:
ActiveAdmin.register Post do
form :partial => "form"
end
а затем в вашем частичном "_form.html.erb" вы должны использовать formtastic DSL, что-то вроде этого:
<%= semantic_form_for [:admin, @post] do |f| %>
<%= f.inputs :title, :body %>
<%= f.buttons :commit %>
<% end %>
На веб-странице четко указано:
If you require a more custom form than can be provided through the DSL, you can pass
a partial in to render the form yourself.
что означает, что DSL для active_admin имеет некоторые небольшие ограничения.
Все мои эксперименты с "render" и "form: partial" закончились без результата. Если вы хотите использовать частичный, он должен заменить всю форму.
Ответ 2
Я использую форму: partial = > "form" во многих случаях, и это определенно способ пойти, когда вам нужны пользовательские формы.
Этот ответ здесь не будет принят как правильный, но иногда я не хочу делать частичный ERB, и я просто хочу добавить некоторый контент в почти совершенную форму, сгенерированную АА.
для тех случаев, когда я использую этот трюк, я добавляю метод контента в AA FormBuilder с этим инициализатором:
ActiveAdmin::FormBuilder.class_eval do
def content
form_buffers.last << with_new_form_buffer do
yield
end
end
end
И затем я могу использовать f.content() в моем блоке формы АА:
form do |f|
f.content do content_tag(:p, "Hello world!") end
f.inputs do
f.input :foo
f.input :bar
end
f.content do content_tag(:p, "Hello world!") end
f.buttons
end
Ответ 3
Когда вы вызываете render
, это фактически отображает весь ответ. Предполагая, что вы пытаетесь вложить это, попробуйте render_to_string
. Хотя я не совсем уверен, что у вас есть в form_sale и есть ли то, что вы хотите в этом блоке.
Ответ 4
Кумара прав. Тем не менее, возможны обезьянчатые атаки на активный админ-форматический мост dsl. Что сработало для меня - это открыть класс ActiveAdmin:: Formbuilder в файле config/initializers/active_admin.rb. Там я добавил:
class ActiveAdmin::FormBuilder
include ActionView::Helpers::TagHelper
def custom_capture_text content
form_buffers.last << template.content_tag(:li,content.html_safe)
end
конец
Затем вы можете написать
f.inputs I18n.t('sale_items') do
f.custom_capture_text(f.template.render(:partial => "form_sale"))
end
Это работало в activeadmin от 0,3 до 0,5. Но будьте осторожны. Обновление ActiveAdmin может сломать его. Удачи.