我使用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;命名空间,应用程序将没问题。
答案 0 :(得分:1)
您尚未定义模块名称空间Common
,因此它尚不存在。试试这个:
module Common
class BasicForm < ActiveRecord::Base
# class code ...
end
end