首页 > 解决方案 > 使用块中的产量复制视图

问题描述

我有一个带有方法的模型,其目标是输出某些东西(如果存在),否则产生块中的代码。非常简单,但是通过一个示例更容易理解:

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

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

我的模型:

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

如果override?为真,这会以我想要的方式在视图中显示“覆盖默认值”。但是,如果它是假的,整个部分会被复制并插入到“默认输出”文本应该是的位置!如果我使用<%= %>.

但是,如果我<%- %>改为使用,则当override?它为 true 时它不输出任何内容,但当它为 false 时,它​​应显示“默认输出”。

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它都无法确定我想要的方式。-=

任何帮助表示赞赏。

标签: ruby-on-rails

解决方案


事实证明,简单地更改yieldputs yield使事情按预期工作。我猜 Rails 会产生收益。笏。


推荐阅读