Rails - 在没有 <%= %> 的情况下将内容附加到辅助方法的块

Posted

技术标签:

【中文标题】Rails - 在没有 <%= %> 的情况下将内容附加到辅助方法的块【英文标题】:Rails - Append content to helper method's block without <%= %> 【发布时间】:2019-03-14 23:38:49 【问题描述】:

我正在尝试创建一个辅助方法来附加内容并显示其中的块,如下所示:

def test &block 
   %<div> 
      <div> Example content </div>
       <p> #capture(&block) </div>
     </div>.html_safe()
end

当我这样称呼它时

<%= test do %>
 **stuff
<% end %>

它可以正常工作,但是当我还需要使用 ERB.new() 从控制器调用它时,当我这样做时,我得到一个错误:

来电:

@result = ERB.new(
%<%= view_context.test do  %>
    <div>content to show inside</div>
  <% end %>
).result(binding)

错误:

SyntaxError ((erb):2: syntax error, unexpected ')'
ncat(( view_context.test do  ).to_s); _erbout.concat "\n

所以我需要在没有“=”的情况下调用,,但是当我这样调用时,附加的内容不显示

我错过了什么?

【问题讨论】:

AFAIK Rails 使用 Erubis,而不是 ERB。它们不太支持相同的语法。 从 erubis gem 中尝试了 Erubis::Eruby.new() 但得到了同样的错误,这是你的意思吗? 【参考方案1】:

也许在您的助手中使用content_tag 会是更好的方法。

对于您的错误,可能是因为您正在执行整个ERB.new(...) 在您看来,应该在一个助手中。

【讨论】:

我正在我的控制器上做 ERB.new 的东西;使用 content_tag 我达到了相同的结果.. 它不能工作,你的 test 方法在一个助手中,所以它需要在你的控制器中定义(不是一个好的解决方案)。 它实际上可以工作,如果我在没有 = 的情况下调用它,它可以工作并运行代码,问题是我使用

以上是关于Rails - 在没有 <%= %> 的情况下将内容附加到辅助方法的块的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3.2 <tr> 标签和 <td> 标签在渲染部分时被剥离

在 Rails 中传递没有模型关联的变量

在rails 4中没有计数的复数

Rails没有保存更改的属性[重复]

Rails 3:#<Array:0xafd0660> 的未定义方法“page”

rails js.erb 没有被渲染