Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4中的助手_Ruby On Rails 4_Helpers - Fatal编程技术网

Ruby on rails 4 Rails 4中的助手

Ruby on rails 4 Rails 4中的助手,ruby-on-rails-4,helpers,Ruby On Rails 4,Helpers,我用Rails编写了一个应用程序,它发展很快,我也在学习。但我不了解帮手 应用程序\u helper.rb module ApplicationHelper # This file it's empty end module UsersHelper def avatar # Do something end end module CustomerHelper # This file it's empty end users\u helper

我用Rails编写了一个应用程序,它发展很快,我也在学习。但我不了解帮手

应用程序\u helper.rb

module ApplicationHelper
    # This file it's empty
end
module UsersHelper

    def avatar
        # Do something
    end
end
module CustomerHelper
    # This file it's empty
end
users\u helper.rb

module ApplicationHelper
    # This file it's empty
end
module UsersHelper

    def avatar
        # Do something
    end
end
module CustomerHelper
    # This file it's empty
end
customer_helper.rb

module ApplicationHelper
    # This file it's empty
end
module UsersHelper

    def avatar
        # Do something
    end
end
module CustomerHelper
    # This file it's empty
end
为什么在任何客户看来都可以在用户助手模块上调用化身助手方法? 那么,为什么要在许多文件中使用单独的助手呢

提前谢谢


注意:Rails的版本4。

因为默认情况下,所有控制器中都包含所有帮助程序。在这种情况下,单独的文件实际上只是用于逻辑分离。您可以通过以下方式改变这种行为:

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

在以前版本的Rails中,控制器将包含一个助手 其名称与控制器的名称匹配,例如MyController将 自动包含MyHelper。返回旧行为集的步骤
config.action\u控制器。将所有帮助程序包含到
false


要补充迈克·坎贝尔的答案:


框架

Rails是一组名为 依次

这些文件包含
方法
等;但它们仍然是文件。 这意味着当你通过Rails运行一个动作时,它会加载 帮助它运行的一系列其他文件(这是 框架(is)

Rails的设计使得您的
helper
方法都是 每次运行操作时都会加载。我不知道为什么,但这很有帮助 管理应用程序不同区域的方法


因此,为了回答您的问题,没有真正的原因来解释为什么助手会被拆分,至少在Rails 4中是这样的:
module ApplicationHelper
?如果是这样,那么您已经在
ApplicationHelper
模块中定义了avatar方法,这就是它工作的原因。抱歉,编写示例是一个错误。我假设您写错了问题?用户帮助程序有:
UsersHelper
,对吗?将帮助程序拆分为不同的文件将使代码更干净。当有三个空文件时,你可能不会注意到,但你的应用程序可能会增长,然后你会感激某些结构而不是一个大文件。默认情况下,每个视图都可以访问任何帮助程序。是否有特定原因导致它们在默认情况下包含所有帮助程序?似乎没有必要。与只在每个控制器中包含所需的助手相比,包含所有控制器是否会对性能产生负面影响?