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

Форма не работает после использования.

Я пытаюсь использовать метод 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.

Любая помощь? Спасибо!

4b9b3361

Ответ 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 может сломать его. Удачи.