ruby-on-rails - 使用块中的产量复制视图
问题描述
我有一个带有方法的模型,其目标是输出某些东西(如果存在),否则产生块中的代码。非常简单,但是通过一个示例更容易理解:
在我的部分中,我有以下内容:
<%= @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
它都无法确定我想要的方式。-
=
任何帮助表示赞赏。
解决方案
事实证明,简单地更改yield
为puts yield
使事情按预期工作。我猜 Rails 会产生收益。笏。
推荐阅读
- web - 是否可以在 xtext Web 编辑器中以透明的方式为用户加载交叉引用文件声明?
- angular - Angular a标签下载文件格式不一致
- google-cloud-data-fusion - 带有嵌套表的自动模式
- aws-lambda - Django Zappa 生成的 cloudfront 生成 403 错误
- amazon-web-services - Lex 可以开始对话吗?
- android - 发送 Whatsapp 邀请,就像其他无法在 pie 设备中运行的应用程序一样
- linux - Linux find 未命中目标?
- javascript - 如何使用对主视图的移动做出反应的three.js和轨道控制添加覆盖部分?
- robotframework - Robot框架中的标签是什么
- node.js - 如何使用 axios 重试 5xx 请求