【问题标题】:Using Blocks in erb's (Sinatra, not Rails)在 erb 中使用块(Sinatra,而不是 Rails)
【发布时间】:2013-09-20 16:24:32
【问题描述】:

我想在 erb 中使用 ruby​​ block/yield 概念(具体来说,以便我可以使用 form_helpers)。当我这样做时,会出现语法错误,但不会出现在我的 erb 代码中;处理完 erb 后,在输出的代码中。

例如,假设我有以下助手:

def test_method   # assume this returns some string
    yield if block_given?
end

我有这个 erb 代码:

<%= test_method do %>
    <h1>asdf</h1>
<% end %>

结果是:

syntax error, unexpected ')' ; @_out_buf.concat(( test_method do ).to_s)

我了解第一行将独立于其他行转换为代码。我不明白为什么或如何解决它。谢谢!


红宝石:1.9.3-p392

辛纳特拉:1.42

还有什么我可以提供的吗?

【问题讨论】:

标签: ruby sinatra erb


【解决方案1】:

只需在 erb 中调用 test_method 之前删除输出帮助器,如下所示:

&lt;% test_method do %&gt;

= helper 期望给出一个单行表达式,而不是多行。

更多详细信息请见hereherehere

【讨论】:

  • 这是否意味着您不能在 erb(返回字符串的辅助方法)中使用 padrino 的 form_for? padrinorb.com/guides/application-helpers#formbuilders
  • 当然可以。请注意示例中 form_for 助手调用之前的破折号。您可以在代码中以相同的方式使用它:&lt;%- test_method do %&gt;
  • 感谢@4pcbr 的帮助。我必须有一些非标准的 erb 渲染引擎,因为我使用 &lt;%- %&gt; 语法得到以下内容:undefined method '-@' for #&lt;String:0x007fd18d989930&gt; - 一个很难搜索的错误消息。
  • 如果你删除&lt;%-并像&lt;% ... %&gt;一样使用它是否有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多