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> 标签在渲染部分时被剥离