Rails:未加载命名空间模型

时间:2015-10-23 17:12:04

标签: ruby-on-rails ruby-on-rails-4

我使用Rails4,并在app / models中创建了一个子文件夹,但我不知道为什么,rails无法加载子文件夹下的文件。

这是app/models/common/basic_form.rb目录中的BasicForm:

class Common::BasicForm < ActiveRecord::Base

    def name=(value)
        super(value.downcase!)
    end

    def phone=(value)
       super(value.blank? ? nil : value.gsub(/[^\w\s]/, '')) 
    end

end

这里是BasicForm的子类:

class Event < Common::BasicForm

    validates   :name,          presence: true
    validates   :description,   presence: true
    validates   :city,          presence: true
    validates   :address,       presence: true
    validates   :event_start,   presence: true
    validates   :event_end,     presence: true
    validates   :phone,         presence: true, length: { maximum: 20, too_long: "%{count} characters are allowed"}     
end

config/application.rb我添加了此config.autoload_paths += [ config.root.join('app') ]行:

module MyApp
  class Application < Rails::Application
    config.autoload_paths += [ config.root.join('app') ]
  end
end

我重新启动了服务器,但我仍然收到此错误:

Unable to autoload constant Common::BasicForm, expected /vagrant/MyApp/app/models/common/basic_form.rb to define it

哪个不是真的,导致linux中的nano可以打开basic_form.rb:

vagrant@rails-server-dev:/vagrant/MyApp$ nano /vagrant/MyApp/app/models/common/basic_form.rb

纳米罐打开basic_form.rb文件

我已经搜索过这个问题,或者关于命名空间模型,但我还没有找到更多信息...... 我想念什么?缺少哪一步?

如果我将basic_form.rb移动到app / models,并删除&#39; Common&#39;命名空间,应用程序将没问题。

1 个答案:

答案 0 :(得分:1)

您尚未定义模块名称空间Common,因此它尚不存在。试试这个:

module Common
  class BasicForm < ActiveRecord::Base
    # class code ...
  end
end