2014-01-31 126 views
3

我在Rails中编写了一个应用程序,它的增长很快,我学习它。但我不明白帮手。Rails 4中的助手4

application_helper.rb

module ApplicationHelper 
    # This file it's empty 
end 

users_helper.rb

module UsersHelper 

    def avatar 
     # Do something 
    end 
end 

customer_helper.rb

module CustomerHelper 
    # This file it's empty 
end 

为什么在任何客户的视图可以调用用户的辅助模块上的虚拟形象的辅助方法? 那么,为什么在许多文件中分开助手呢?

在此先感谢。

P.S:Rails的版本4

+0

你确定你的users_helper是这样定义的:'module ApplicationHelper'?如果是这样,那么你已经在'ApplicationHelper'模块中定义了头像方法,这就是它的工作原理。 – Surya

+0

对不起,这是写错例子的错误。 –

+0

我假设你写错了问题? users_helper有:'UsersHelper',对吧? – Surya

回答

6

因为所有的助手都包含在所有控制器,默认情况下。单独的文件实际上只是为了在这种情况下进行逻辑分离。您可以更改该行为:

默认情况下,每个控制器将包含所有帮助程序。

在Rails的先前版本的控制器将包括一个辅助 ,其名称相匹配的是,控制器的,例如,将myController的自动 包括MyHelper。返回旧的行为集 config.action_controller.include_all_helpersfalse

http://api.rubyonrails.org/classes/ActionController/Helpers.html

+0

是否有一个特定的原因,他们为什么会默认包含所有助手?似乎没有必要。对于包括所有人而言,是否会对性能产生负面影响,而不是仅在每个控制器中包含您需要的帮助者? – WhyAyala

0

为了增加麦克·坎贝尔的回答是:


框架

魔术,因为它是,Rails是一组文件,这是所谓的 按顺序

这些文件包含classes,methods等;但他们仍然是文件。 这意味着,当您运行通过Rails的一个动作,它加载了 一系列其他dependent文件,以帮助它运行(这是一个 框架是什么)

导轨的设计是这样的,你helper方法全部 每次运行时都会加载一个动作。我不知道为什么,但它有助于 辖为您的应用程序的不同区域的方法

因此,要回答你的问题,还有就是为什么佣工分头行动,至少使用Rails没有真正的理由4