使用块的屈服将复制视图



我有一个模型,它有一个方法,目标是输出一些存在的东西,否则在块中生成代码。很简单,但举个例子更容易理解:

在我的部分中,我有以下内容:

<%= @item.output do %>
Default output
<% end %>

我的型号:

def output
return "Override the default" if override?
yield
end

如果override?为真;覆盖默认的";但是,如果它为false,则整个分部将被复制并插入到"处;默认输出";文本应该是!如果我使用<%= %>,就会发生这种情况。

然而,如果我使用<%- %>,当override?为真时,它什么也不输出,但当它为假时,它显示"0";默认输出";正如它应该做的那样。

我想要的结果是,当override?为假时,分部中的代码执行块中的代码(在这种情况下,为"默认输出"(,当为真时,执行块中代码。在标准Ruby中,它可以正常工作:

irb(main):001:0> def test(bool)
irb(main):002:1>   return "Method" if bool
irb(main):003:1>   yield
irb(main):004:1> end
=> :test
irb(main):005:0> 
irb(main):006:0> test(true) { "Block" }
=> "Method"
irb(main):007:0> test(false) { "Block" }
=> "Block"

但是Rails显然对yield和视图做了一些^%$#的处理,所以无论我在部分中使用-还是=来呈现代码,它都不知道我希望它如何。

感谢您的帮助。

事实证明,简单地将yield更改为puts yield就能使事情按预期进行。我想Rails会产生收益。瓦特。

Remove=from<%=@item.output do%>将其更改为。<%@item.output do%>

最新更新