在 Rails 控制台中加载和使用夹具
Posted
技术标签:
【中文标题】在 Rails 控制台中加载和使用夹具【英文标题】:Load and use fixture in rails console 【发布时间】:2011-10-26 00:37:20 【问题描述】:我想知道是否有办法在 Rails 控制台中加载和/或使用夹具。实际上,我想从我的夹具 users.yml
创建一个用户来做一些测试,而不必经历每次做 User.new(:name = "John", :email = "..")
的所有“痛苦”。
我目前在测试环境中(rails c RAILS_ENV=test
)。
如果这不是一个好的做事方式,请说出来。我是 Rails 新手,所以我来这里学习 :)
【问题讨论】:
【参考方案1】:您应该能够在进入控制台之前加载您的灯具。像这样:
RAILS_ENV=test bin/rails db:fixtures:load
RAILS_ENV=test bin/rails console
但是,您仍然无法像在测试中那样访问您的夹具数据。这只是将您的测试数据库与您的夹具数据一起加载。所以你仍然需要做类似的事情:
user = User.find_by(name: "John")
但是,您仍然可以为此类事情创建快捷方式。您可以将任何您想要的 ruby 代码添加到 ~/.irbrc。我建议按照here 的描述创建一个 .railsrc 文件。然后,您可以设置以下内容:
john = User.find_by(name: "John")
所以现在您可以在控制台加载后开始引用变量“john”。顺便说一句,我链接到的帖子显示了如何设置全局 .railsrc 文件,但您可以设置它以便每个项目都有一个 .railsrc。或者,如果您想要一些不那么花哨但容易做的事情......只需在您的项目中创建一个 ruby 文件(可能是“shortcuts.rb”)。加载控制台后,只需执行 require 'shortcuts'。
【讨论】:
感谢您的回答 - 但是(至少在 Rails 3.2.5 中)命令是:rails c test 从 Rails 6.0 开始,rails c test
似乎不起作用。改为RAILS_ENV=test rails c
@MasaSakano LOL...回到我原来的答案?【参考方案2】:
可能会迟到... 导轨 4
require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
【讨论】:
【参考方案3】:您也可以将夹具加载到您的开发数据库中:
$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
【讨论】:
【参考方案4】:所以我有类似但略有不同的需求。我想使用我现有的装置(来自我的 rspec 测试)来填充我的开发数据库。这就是我通过向我的 rake 文件(位于 libs/tasks/*.rake 中)添加一个新任务来做到这一点的方法:
task d_populate: :environment do
require 'active_record/fixtures'
fixtures_dir = File.join(Rails.root, '/spec/fixtures') #change '/spec/fixtures' to match your fixtures location
Dir.glob(File.join(fixtures_dir,'*.yml')).each do |file|
base_name = File.basename(file, '.*')
puts "Loading #base_name..."
ActiveRecord::Fixtures.create_fixtures(fixtures_dir, base_name)
end
end
如果您将其与 db:reset 结合使用,您也可以通过将其添加到您的 rake 任务来随意填充您的开发环境:
task reseed: [:environment, 'db:reset', 'db:d_populate']
然后你可以调用 rake db:reseed 从fixture YAML 文件中填充。
【讨论】:
【参考方案5】:您可以按如下方式在 Rails 3.2 控制台中加载夹具:
require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
【讨论】:
【参考方案6】:可以使用 FIXTURES_DIR 变量指定备用夹具目录。该值应该与测试/夹具相关。
$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures'
也可以指定一组有限的灯具
$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures' FIXTURES=users,user_roles
【讨论】:
hmm ... 这对我不起作用,但这确实有效:rake db:fixtures:load RAILS_ENV=test FIXTURES_PATH='spec/fixtures' FIXTURES=users,participants 这是从 Rails 6 开始的最新方法。FIXTURES_DIR
可用于指定 test/fixtures 的子目录。 FIXTURES_PATH
可用于指定任何路径。以上是关于在 Rails 控制台中加载和使用夹具的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Rails 控制台中加载 Ruby EventMachine - 没有要加载的文件
我的控制器索引视图的背景图像未在 rails 4 应用程序中加载?