我正在尝试按照Presenter设计模式构建我的 Rails 应用程序。我的页面的一部分包含一些嵌套在锚标记内的 div,使用常规 html 可以正常工作,但是当我尝试使用 ActionView 帮助程序呈现它时不起作用。
我的视图如下所示:
<div class="hero-container clear">
<%= presenter.cta_background do %>
<%= presenter.header %>
<%= presenter.subheader %>
<%= presenter.button %>
<% end %>
</div>
我的演讲者班:
class Presenter < SimpleDelegator
def initialize(model, view)
@model, @view = model, view
super @model
end
def h
@view
end
def header
if @model.header.present?
h.content_tag :div, @model.header
end
end
def subheader
if @model.subheader.present?
h.content_tag :div, @model.subheader
end
end
def cta_button
if @model.text.present?
h.content_tag :div, @model.text
end
end
def cta_background
h.link_to @model.target do
yield
nil
end
end
end
它最终呈现如下所示的 html:
<div class="hero-container clear">
<div>Eaque ea adipisci accusantium.</div>
<div>Sed quibusdam amet et voluptatum.</div>
<div>Click here</div>
<a href="/products">products</a>
</div>
我的目标是在锚标记内包含三个 div ,这是通过将它们以块的形式传递给link_to
函数来完成的。当我像我正在做的那样从另一种方法调用该块时,为什么它不起作用?