【发布时间】:2018-07-09 16:09:11
【问题描述】:
我想开始为 Rails 视图助手创建对象,而不是使用助手(某种“滚动你自己的”Cell::Object of Trailblazer 或 Hanami 视图)。在我们开始混合块之前,一切都按预期工作,奇怪的是,我们在 erb 和 haml 模板上得到了不同的结果!
这是一个普通的 Rails v5.2 应用程序,仅添加了 haml-rails,以简化问题:
<h1>ERB</h1>
<%= bordered do %>
<p>This works</p>
<% end %>
<hr />
<%= Builder.new.bordered do %>
<p>This not works</p>
<% end %>
app/views/home/erb.html.erb
%h1 HAML
= bordered do
%p This works
%hr
= Builder.new.bordered do
%p This not works
app/views/home/haml.html.haml
module HomeHelper
def bordered(&block)
content_tag(:div, style: 'border: 1px solid black') do
block.call
end
end
end
app/helpers/home_helper.rb
class Builder
include ActionView::Helpers
include ActionView::Context
def bordered(&block)
content_tag(:div, style: 'border: 1px solid black') do
block.call
end
end
end
app/presenters/builder.rb
如您所见,当使用帮助程序类时,输出会出错,但奇怪的是,根据我们使用的模板引擎会有所不同。有人可以指出正确的方向以了解正在发生的事情以及我们如何做想?谢谢
【问题讨论】:
-
此处的示例代码:github.com/vizcay/view_helper
-
查看NumberHelper#L199 了解 Rails 如何在幕后实际处理此类事情的一个很好的示例。
标签: ruby-on-rails ruby-on-rails-5