繁体   English   中英

如何从我的Rails 3应用程序的/ lib /文件夹中的ruby脚本中访问我的某个模型?

[英]How do I access one of my models from within a ruby script in the /lib/ folder in my Rails 3 app?

我尝试将我的脚本放在从我的模型继承的类中,如下所示:

class ScriptName < MyModel

但是当我在命令行运行rake my_script时,我收到了这个错误:

rake aborted!
uninitialized constant MyModel

我究竟做错了什么?

另外,我应该将文件命名为my_script.rbmy_script.rake吗?

只需要文件。 我在我的一个rake任务中执行此操作(我将其命名为my_script.rake

require "#{Rails.root.to_s}/app/models/my_model.rb"

这是一个完整的例子

# lib/tasks/my_script.rake

require "#{Rails.root.to_s}/app/models/video.rb"

class Vid2 < Video
  def self.say_hello
    "Hello I am vid2"
  end
end

namespace :stuff do
  desc "hello"
  task :hello => :environment do
    puts "saying hello..."
    puts Vid2.say_hello
    puts "Finished!"
  end
end

但更好的设计是让rake任务简单地调用辅助方法。 好处是可以更轻松地扫描可用的rake任务,更容易调试,并且rake任务运行的代码变得非常可测试。 例如,您可以添加rake_helper_spec.rb文件。

# /lib/rake_helper.rb
class Vid2 < Video
  def self.say_hello
    "Hello I am vid2"
  end
end

# lib/tasks/myscript.rake
namespace :stuff do
  desc "hello"
  task :hello => :environment do
    Vid2.say_hello
  end
end

为了让它工作,我所要做的就是将我的要求置于任务规范之上,然后只需声明:environment标志:

task :my_script => :environment do
 #some code here
end

就这样,让我可以访问我的所有模型。 require 'active_record'甚至require我的模型。

刚刚指定的环境和我的所有模型都可以访问。

我也遇到了Nokogiri的问题,我所做的就是从我的文件顶部删除它作为一个require并将其添加到我的Gemfile中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM