我从uninitialized constant
类
class
方法时收到model
class Post < ActiveRecord::Base
before_create :fetch_data
belongs_to :user
def fetch_data
self.name = 'test'
self.get_groups = Groups.new(self.department).verdict
end
end
class Groups
@@current_state
def initialize(department_arrangement)
@@current_state = Marshal.load(Marshal.dump(department_arrangement))
end
def self.get_groups
@@current_state.each do |row|
# code
end
return # return some value
end
# more code
end
NameError (uninitialized constant Post::Group):
app/models/post.rb:17:in `fetch_data'
app/controllers/post_controller.rb:19:in `create'
Rendered /Users/komal/.rvm/gems/ruby-2.1.4/gems/actionpack-4.2.1/lib/action_dispatch/middleware/templates/rescues/_source.erb (21.1ms)
Rendered /Users/komal/.rvm/gems/ruby-2.1.4/gems/actionpack-4.2.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (8.7ms)
Rendered /Users/komal/.rvm/gems/ruby-2.1.4/gems/actionpack-4.2.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.8ms)
基本上我想传递来自self.department
的参数views
并使用该变量我正在进行一些计算并将结果保存在数据库中。做正确的方法是什么?我想在get_groups
中保留group class
方法。
我在config.autoload_paths += %W( #{config.root}/app/utility )
和application.rb
中添加了require 'group_utility' in model class
。现在我可以看到它正在调用构造函数,但它正在抛出No method exist: get-groups
错误。
答案 0 :(得分:2)
Ruby命名空间常量。在这里,通过调用Groups
类中的Post
,假设它将在所述类中找到常量。
如果要引用在当前命名空间之外声明的常量,则需要在其前面添加::
:
self.get_groups = ::Groups.new(self.department).verdict
如果现在这样做会引发NameError (uninitialized constant Groups):
,那么就不会加载创建Groups
类的文件。
答案 1 :(得分:1)
您需要“要求”其他类,如果它们位于同一目录中,请使用“require_relative”。
require_relative 'Groups'
我也是铁杆的新手,从我所看到的这一点大部分都没有完成。额外的类将存储为帮助程序。
答案 2 :(得分:0)
NameError (uninitialized constant Post::Group):
这是什么意思?
Group
课程无法访问或尚未初始化。要使其可访问,您必须在config.autoload_paths += %W( #{config.root}/app/<name of the directory>)
applicaiton.rb
现在,当您启动服务器时,类将自动加载。
在模型类中添加require '<class-name>'
将使其可访问。正如您所说,您来自java
背景,requuire <class-name>
相当于import Groups
。
你们都已经设置好了,现在只需要访问类方法就可以通过以下代码来实现(@tonchis提到)
self.get_groups = ::Groups.new(self.department).verdict