什么需要魔法在轨道发生在这里?

时间:2015-01-15 11:30:52

标签: ruby-on-rails ruby

我在没有基本的Ruby知识的情况下启动了Rails。

现在我在require, load, include, extend questions

我已经了解到如果它是一个单独的文件

在Ruby中,你必须包含require or load'文件路径'

如果是这样的话,在我的application_controller中需要有一堆要求,

如果我想要include一帮助手。

离>

require 'path_to_the_helpera.rb'
require 'path_to_the_helperb.rb'
class ApplicationController < ActionController:Base
  include HelperA
  include HelperB
end

但众所周知,Rails应用程序中没有requirelib文件夹中的外部库除外)

我假设config文件夹里面会有这种魔力....对我这样的菜鸟来说很难

2 个答案:

答案 0 :(得分:2)

  

我在没有基本的Ruby知识的情况下启动了Rails。

这绝对不是最好的方法。

Rails大量使用约定。因此,如果您在/app/helpers文件夹中放置一个帮助程序,并根据约定对其进行命名,它将自动加载并包含在您的应用程序中。

例如

# file /app/helpers/foo_helper.rb
module FooHelper
  def print_foo
    puts "foo!"
  end
end

现在,您只需在视图中调用print_foo即可。

答案 1 :(得分:2)

Rails添加了一个const_missing钩子,这样当你引用一个卸载的常量时,它会首先尝试为你加载它,而不是引发一个NameError。

有一个rails guide广泛讨论了它是如何做到的,陷阱和提示但主要的是你需要用约定来命名内容,即一个名为{{1}的类或模块应该在rails的搜索路径中的一个文件夹中的foo_bar.rb中。