繁体   English   中英

在另一个助手中包装Rails 3块助手

[英]Wrapping a Rails 3 block helper in another helper

我想创建一个这样的助手(我正在使用Formtastic gem):

def admin_form_for(record, columns = nil, &block)
  semantic_form_for [:admin, record] do |f|
    f.semantic_errors
    f.inputs *columns if columns
    capture(f, &block) if block_given?
    f.buttons
  end
end

我试图包装一个块帮助程序admin_form_for ,然后在其中调用一些输出文本的方法,然后在其中捕获一个ERB块。

我尝试了各种各样的事情

capture(f, &block) if block_given?

yield f if block_given?

concat(capture(f, &block)) if block_given?

似乎没有任何工作。

被帮助者的用法最终看起来像这样:

<%= admin_form_for @record, [:name, :email] do |f| %>
  <p><%= some_other_helper %></p>
<% end %>

我知道这是一个月的延迟,但是我认为这是您想要的:

def admin_form_for(record, columns = nil, &block)
  with_output_buffer do  
    semantic_form_for [:admin, record] do |f|
      f.semantic_errors
      f.inputs *columns if columns
      capture(f, &block) if block_given?
      f.buttons
    end
  end
end

在这里,with_output_buffer返回一个字符串,该字符串表示传入的块渲染的内容。

抱歉,没有测试,但是您可以尝试以下操作:

def admin_form_for(record, columns = nil, &block)
  semantic_form_for [:admin, record] do |f|
    f.semantic_errors
    f.inputs *columns if columns
    f.semantic_fields_for(columns, &block) if columns && block_given?
    f.buttons
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM