问题 使用Rails助手来渲染部分


根据我的理解,帮助程序主要用于从某些特定于视图的逻辑中清除视图。

但是在我目前的新项目(遗留应用程序)中,我偶然发现了许多看起来像这样的帮助程序

def itemprepare
  render :partial => 'items/itemlist_summary'
end

它是否正确?渲染部分给我似乎是你想在视图中做的事情,因为它不包括任何需要抽象的逻辑。

我应该只是内联所有这些助手吗?


1136
2018-01-02 12:22


起源



答案:


渲染部分不属于帮助器。助手应该帮助你做一些包含逻辑的事情。逻辑不属于控制器,除非它是逻辑渲染部分并决定是否应该显示某些内容。


8
2018-01-02 12:32





虽然你通常不应该使用辅助方法来渲染部分,但我可以看到在某些情况下可能是必要的。对于那些情况,你需要使用 concat 方法:

def itemprepare
  concat(render(:partial => 'items/itemlist_summary'))
end

7
2017-08-09 20:55



正是我在寻找:) - Old Monk


答案:


渲染部分不属于帮助器。助手应该帮助你做一些包含逻辑的事情。逻辑不属于控制器,除非它是逻辑渲染部分并决定是否应该显示某些内容。


8
2018-01-02 12:32





虽然你通常不应该使用辅助方法来渲染部分,但我可以看到在某些情况下可能是必要的。对于那些情况,你需要使用 concat 方法:

def itemprepare
  concat(render(:partial => 'items/itemlist_summary'))
end

7
2017-08-09 20:55



正是我在寻找:) - Old Monk


像Ajedi32所说,部分使用属于视图,但有时在帮助器中使用它们很有用。我希望展示我在我的应用程序中所做的事情是有用的:

我一直在关注这篇优秀的文章 考虑Rails帮助干扰我们的观点。我正在使用带有固定标题,导航栏,导航面板和页脚的Jquery Mobile。

在每个页面中我都需要包含页脚和导航面板,所以通常它会是:

  <div data-role="footer">
    <h4>Page Footer</h4>
  </div><!-- /footer -->
  <%= render "shared/nav_panel" %>
</div><!-- /page -->

在每页的末尾。

然后我将render partial重构为应用程序助手,现在它是:

  # app/helpers/application_helper.rb
  def page_footer
    footer = content_tag :div , :"data-role" => "footer" do
      content_tag :h4, "Page Footer"
    end
    nav_panel = render(:partial => 'shared/nav_panel')
    footer + nav_panel
  end

在视图中我只是打电话:

<%= page_footer %>

这只是一个简短的例子;实际上,应用程序的页脚会根据登录状态,用户语言等进行更改。


1
2017-12-29 14:53





在我们的项目中,我们有几个这样的帮手,但大多数都在我们的定制宝石中。使用帮助程序包装部分呈现可防止应用程序知道信息的呈现方式,只要呈现请求的视图部分,我们就可以轻松地扩展逻辑,更改部分或在此帮助程序中执行任何操作。有时这些部分需要一些驻留在gem本身内部的数据,并且不需要将它暴露给应用程序。所以应用程序调用helper方法(有时根本没有任何参数),形成所需的参数和locals并将它们传递给partial。

但是当你只是在你的应用程序中部分呈现并且你不需要任何关于该呈现的广泛逻辑时,我认为从为每个部分创建新助手时没有多少用处。


0
2018-01-02 12:31