如何在Ruby控制台中访问命名空间方法?

时间:2012-01-24 18:00:19

标签: ruby-on-rails ruby ruby-on-rails-3 namespaces rails-console

发现这篇文章Include namespace in Rails 3.1 console,但它似乎无效。

定义了以下lib / task,它可以从命令行运行:rake namespace_name:task_name

如何在控制台内调用method_name中的方法namespace_name,而无需调用任务?

rails console
namespace_name::task_name
NameError: undefined local variable or method 'namespace_name' for main:Object

irb namespace_name
NameError: undefined local variable or method 'namespace_name' for main:Object

使用Rails 3.07,Ubuntu。

2 个答案:

答案 0 :(得分:4)

如果你想调用.rake文件中定义的方法,你会做类似于@Nate所说的内容,但是不要调用raketask,而是调用方法:

require 'rake'
Rake.load_rakefile 'lib/tasks/namespace_name.rake'
method_name(arg1, arg2)

您不需要指定命名空间,但我只是尝试了这个并且它有效,这有点奇怪。

答案 1 :(得分:3)

你混淆了两种不同的“命名空间” - Ruby模块可以执行“命名空间”Ruby代码的任务; Rake命名空间仅在Rake中用于对任务进行分类,并且它们不会创建模块命名空间。

您链接的页面仅适用于Ruby模块命名空间。

如果你想从Rails控制台调用Rake任务,那就更复杂了......

require 'rake'
Rake.load_rakefile 'lib/tasks/namespace_name.rake'
Rake::Task['namespace_name:task_name'].invoke

或者只是在Rails控制台中的命令行上调用它 -

%x[rake namespace_name:task_name]