Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 RubyonRails不需要';不行?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails不需要';不行?

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

这是我第一次申请RoR

我想使用这个类(app/models/from_db/users/user_base.rb)

在此控制器中(app/controllers/my_controller.rb)

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:)+关于自动阅读的信息是一个很好的提示