2012-01-02 243 views
11

根据我的理解,助手主要用于清理某些特定于视图的逻辑的视图。使用Rails助手渲染部分

但在我目前的新项目(遗留应用程序),我已经在很多助手看起来像这样

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

这是正确的偶然?渲染一个部分对我来说似乎是你想要在视图中做的事情,因为它不包含任何需要抽象的逻辑。

我应该内嵌所有这些助手吗?

回答

8

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

0

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

但是当你只是渲染你的应用程序中的部分,你不需要周围的渲染,我不认为有从每部分创建新的辅助多大用处广泛的任何逻辑。

6

虽然你一般不应使用辅助方法来呈现的谐音,我可以看到在某些情况下可能是必要的。对于这些情况下,您需要使用concat方法:

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

正是我在找的东西:) – 2016-06-14 19:56:21

1

像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 %> 

这仅仅是一个简单的例子;实际上该应用有一个根据登录状态,用户语言等而改变的页脚。