我尝试在activeAdmin表单方法中使用render方法,但是在插入渲染之后 在代码中,它停止工作。
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内容。
有任何帮助吗? 谢谢!
答案 0 :(得分:8)
根据the documentation,在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,它应该替换所有表单。
答案 1 :(得分:2)
我正在使用form:partial =&gt;在许多情况下“形式”,这绝对是你想要自定义表单的方法。
这个答案在这里并不被认为是正确的答案,但有时候我不想让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
答案 2 :(得分:1)
当您致电render
时,这实际上会呈现整个回复。假设你试图嵌套这个,试试render_to_string
。虽然我不完全确定你在form_sale中有什么,以及这是否是你想要的那个块。
答案 3 :(得分:1)
Qumara是对的。仍然,monkeypatches to active admin_ formtastic dsl bridge是可能的。对我有用的是在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升级可能会破坏它。祝你好运。