Ruby on rails RubyonRails不需要';不行?
这是我第一次申请RoR 我想使用这个类(app/models/from_db/users/user_base.rb) 在此控制器中(app/controllers/my_controller.rb)Ruby on rails RubyonRails不需要';不行?,ruby-on-rails,ruby,Ruby On Rails,Ruby,这是我第一次申请RoR 我想使用这个类(app/models/from_db/users/user_base.rb) 在此控制器中(app/controllers/my_controller.rb) class MyController
class MyController
user=UserBase.new引发此错误:
未初始化常量MyController::UserBase
当我放入FromDb::Users::UserBase.new时,一切正常,但我认为“require”类似于C#中的“using”或java中的“import”。我不想总是把这个名称空间放在来自其他目录的类之前。我做错了什么
我的第二个问题。是否有任何方法可以写入require“FromDb/Users/UserBase”实例require“FromDb/Users/UserBase”?现在,当我放置第一个版本(FromDb/Users/UserBase)时,它会抛出以下错误:
无法加载这样的文件--FromDb/Users/UserBase
我使用ruby 2.1.5和Rails 4.2.1
require
只是将文件的内容加载到内存中,所以您仍然必须使用FromDb::Users::UserBase
,我建议使用它,它更清晰
您不能将名称骆驼化:它应该是一个文件名
您必须从根目录中指定路径,这样更安全:
require "#{Rails.root}/app/models/from_db/users/user_base"
请注意,您不需要require
,因为您的代码位于/app
要创建快捷方式,您可以执行以下操作:
def default
user = user_base_class.new
end
def user_base_class
::FromDb::Users::UserBase
end
这样就不会创建无用的常量。
require
只需将文件的内容加载到内存中,所以您仍然必须使用FromDb::Users::UserBase
,我建议使用它,这样更清晰
您不能将名称骆驼化:它应该是一个文件名
您必须从根目录中指定路径,这样更安全:
require "#{Rails.root}/app/models/from_db/users/user_base"
请注意,您不需要require
,因为您的代码位于/app
要创建快捷方式,您可以执行以下操作:
def default
user = user_base_class.new
end
def user_base_class
::FromDb::Users::UserBase
end
这样就不会创建无用的常量。关于第一个问题,请尝试以下方法导入名称空间
include FromDb::Users
不要到处使用导入,因为它们可能会在您的类中引起冲突(请参阅apheading的注释)
或者简单地创建一个别名:
FUsers = FromDb::Users
FUsers::UserBase.new...
关于第一个问题,请尝试以下方法导入名称空间
include FromDb::Users
不要到处使用导入,因为它们可能会在您的类中引起冲突(请参阅apheading的注释)
或者简单地创建一个别名:
FUsers = FromDb::Users
FUsers::UserBase.new...
虽然
require
类似于Java的import
,但它没有import
提供的任何名称空间操作功能。如果你真的想有更短的引用,你需要自己创建它们
class MyController < ApplicationController
UserBase = FromDb::Users::UserBase
def default
user = UserBase.new
# ... etc
end
end
class MyController
另外,由于这是一个Rails应用程序,您不需要显式调用
require
(最好不要使用它)。如果您按照标准约定命名所有内容,Rails将自动为您要求文件,然后在文件更改时重新加载。如果手动执行require
操作,则会丢失自动重新读取功能。虽然require
类似于Java的import
,但它没有import
提供的任何名称空间操作功能。如果你真的想有更短的引用,你需要自己创建它们
class MyController < ApplicationController
UserBase = FromDb::Users::UserBase
def default
user = UserBase.new
# ... etc
end
end
class MyController
另外,由于这是一个Rails应用程序,您不需要显式调用
require
(最好不要使用它)。如果您按照标准约定命名所有内容,Rails将自动为您要求文件,然后在文件更改时重新加载。如果您使用手动require
,您将失去自动重新阅读功能。我不会包含模块
,因为所谓的快捷方式
,您;d只是到处污染和复制方法和类+冲突的危险我不会包括一个模块
,为了所谓的快捷方式
,你;d只是到处污染和复制方法和类+冲突的危险谢谢。这有助于我更好地理解Rails:)+关于自动阅读的信息是一个很好的提示,谢谢。这有助于我更好地理解Rails:)+关于自动阅读的信息是一个很好的提示