我会在应用程序启动时用一些虚拟条目填充数据库(MySQL)。
我创建了:
class DatabaseInitializer
def populate_database
...
end
end
lib/database_initializer.rb
中的。
我知道lib
目录中的所有文件都应该自动加载。
问题1:是否有任何命令可以查看已加载的所有文件的列表?
然后,在controllers/main_controller.rb
我有:
require 'lib/database_initializer.rb'
class MainController < ApplicationController
def initialize
DatabaseInitializer.new.populate_database
end
def index
...
end
end
但是,我收到了以下错误:
LoadError in MainController#index
no such file to load -- lib/database_initializer.rb
问题2:为什么找不到database_initializer.rb
?
问题3:这种“Rails足够”的方式来预先填充数据库吗?你会这样做吗(把database_initializer.rb
放在其他地方,从其他地方打电话给DatabaseInitializer.new.populate_database
,电子邮件)?
答案 0 :(得分:3)
问题1
$LOADED_FEATURES
问题2
# the 'lib' directory is already added to the load
# path in the Rails initialization process, so simply:
require 'database_initializer`
问题3
# db/seeds.rb
c = Company.create! :name => 'ABC Inc.'
p = Person.create! :name => 'Jeremy', :company => c
$ rake db:seed
答案 1 :(得分:2)
当需要来自ruby的文件时,通常会删除文件扩展名。试试require database_initializer
。从rails-3的加载路径中删除了lib/
,但我认为现在已经回来了。如果没有,请参阅config.autoload_paths
中的config/application.rb
。
但是,我认为这可能是个坏主意。如果您需要确保始终为应用程序提供一致且不可变的数据集,为什么不在模型中的ruby中定义它?
此外,还有一种在rails中添加种子数据的机制。请参阅db/seeds.rb
和命令rake db:seed
答案 2 :(得分:1)
对于lib中的任何文件,您只需使用:require 'database_initializer'
。