据我所知,帮助器主要用于清理视图中的一些特定于视图的逻辑。
但是在我目前的新项目(旧的应用程序)中,我遇到了很多看起来像这样的帮助器:
def itemprepare
render :partial => 'items/itemlist_summary'
end
这样做是否正确?在我看来,呈现一个部分视图似乎是你希望在视图中完成的事情,因为它不包含需要抽象化的任何逻辑。
我应该只内联所有这些辅助函数吗?
据我所知,帮助器主要用于清理视图中的一些特定于视图的逻辑。
但是在我目前的新项目(旧的应用程序)中,我遇到了很多看起来像这样的帮助器:
def itemprepare
render :partial => 'items/itemlist_summary'
end
这样做是否正确?在我看来,呈现一个部分视图似乎是你希望在视图中完成的事情,因为它不包含需要抽象化的任何逻辑。
我应该只内联所有这些辅助函数吗?
在帮助程序中,不应该包含呈现局部视图的内容。帮助程序应该帮助你执行包含逻辑的操作。除非是渲染局部视图并决定是否显示某些内容的逻辑,否则逻辑不应该存在于控制器中。
虽然通常不应该使用助手方法来渲染部分视图,但我可以理解在某些情况下可能是必要的。对于这些情况,您需要使用 concat
方法:
def itemprepare
concat(render(:partial => 'items/itemlist_summary'))
end
正如Ajedi32所说,partials属于视图,但有时在helpers中使用它们很有用。我希望展示一下我在我的应用程序中所做的:
我一直在遵循这篇优秀的文章Thinking of Rails Helper to help DRY our view。我正在使用Jquery Mobile,其中包括一个固定的标题、导航栏、导航面板和页脚。
每个页面都需要包含页脚和导航面板,通常会是这样:
<div data-role="footer">
<h4>Page Footer</h4>
</div><!-- /footer -->
<%= render "shared/nav_panel" %>
</div><!-- /page -->
# 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 %>