根据我的理解,助手主要用于清理某些特定于视图的逻辑的视图。使用Rails助手渲染部分
但在我目前的新项目(遗留应用程序),我已经在很多助手看起来像这样
def itemprepare
render :partial => 'items/itemlist_summary'
end
这是正确的偶然?渲染一个部分对我来说似乎是你想要在视图中做的事情,因为它不包含任何需要抽象的逻辑。
我应该内嵌所有这些助手吗?
根据我的理解,助手主要用于清理某些特定于视图的逻辑的视图。使用Rails助手渲染部分
但在我目前的新项目(遗留应用程序),我已经在很多助手看起来像这样
def itemprepare
render :partial => 'items/itemlist_summary'
end
这是正确的偶然?渲染一个部分对我来说似乎是你想要在视图中做的事情,因为它不包含任何需要抽象的逻辑。
我应该内嵌所有这些助手吗?
呈现部分不属于助手。助手应该帮助你做一些包含逻辑的事情。逻辑不属于控制器,除非它是渲染部分逻辑并决定是否显示某些内容的逻辑。
我们在我们的项目中有几个这样的助手,但其中大部分都在我们的自定义宝石中。使用helper包装局部渲染可以防止应用程序知道信息如何呈现,并且只要呈现请求的视图部分,我们就可以轻松扩展逻辑,更改部分内容或在此帮助器中执行任何我们想要的操作。有时这些部分需要驻留在gem内部的一些数据,并且不需要将其暴露给应用程序。所以应用程序调用helper方法(有时没有任何参数),它会形成所需的参数和局部变量,并将它们传递给局部变量。
但是当你只是渲染你的应用程序中的部分,你不需要周围的渲染,我不认为有从每部分创建新的辅助多大用处广泛的任何逻辑。
虽然你一般不应使用辅助方法来呈现的谐音,我可以看到在某些情况下可能是必要的。对于这些情况下,您需要使用concat
方法:
def itemprepare
concat(render(:partial => 'items/itemlist_summary'))
end
像Ajedi32说,谐音使用属于观点,但有时在助手使用它们是非常有用的。我希望这是有用的,以显示我在我的应用程序已经完成:
我一直在关注的优秀文章Thinking of Rails Helper to help DRY our view。我正在使用带有固定标题,导航栏,导航面板和页脚的Jquery Mobile。
在每一页我需要包括页脚和导航面板,所以通常它会一直:
在每一页的末尾。
然后我重构渲染部分到应用程序中辅助细胞和现在是:
# 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 %>
这仅仅是一个简单的例子;实际上该应用有一个根据登录状态,用户语言等而改变的页脚。
正是我在找的东西:) – 2016-06-14 19:56:21