13

我尝试在我的 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

插入 render 方法后,屏幕上只显示 form_sale 内容。

有什么帮助吗?谢谢你!

4

4 回答 4

8

根据文档,在 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.

这意味着,active_admin 的 DSL 有一些轻微的限制。

我所有的 'render' 和 'form :partial' 实验都没有结果。如果您想使用 partial ,它应该替换所有 form 。

于 2012-12-18T00:20:19.913 回答
2

我在很多情况下都使用 form :partial => "form" ,当您需要自定义表单时,这绝对是要走的路。

这个答案在这里不能被接受为正确的答案,但有时我不想制作部分 ERB,我只想向几乎完美的 AA 生成表单添加一些内容。

对于那些我使用这个技巧的时候,我使用这个初始化器向 AA FormBuilder 添加了一个内容方法:

ActiveAdmin::FormBuilder.class_eval do
  def content
    form_buffers.last << with_new_form_buffer do
        yield
    end
  end
end

然后我可以在我的 AA 表单块中使用 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
于 2012-12-21T11:20:36.647 回答
1

当您调用render它时,它实际上会呈现整个响应。假设您正在尝试嵌套它,请尝试render_to_string. 尽管我不完全确定您在 form_sale 中拥有什么,以及这是否是您在该区块中想要的。

于 2012-12-17T19:17:41.747 回答
1

库马拉是对的。尽管如此,活动管理员〜formtastic dsl桥的monkeypatches是可能的。对我有用的是在 config/initializers/active_admin.rb 文件中打开 ActiveAdmin::Formbuilder 类。在那里我补充说:

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 升级可能会破坏它。祝你好运。

于 2012-12-18T10:33:58.420 回答