我在我的模型中调用另一个模型的类方法,似乎找不到它。
详情
add_existing_items
是Category
的实例方法,我从中调用元数据的类方法,但这会失败并显示错误。
Caught exception : NoMethodError : undefined method `update_or_add_metadata' for Mongoid::Relations::Metadata:Class
/Users/anil20787/workspace/repos/anil_reps/metadata_favorite/app/models/category.rb:36:in `block in add_existing_items'
当我从类别控制器调用它时,对Metadata
的类方法的调用非常正常。
类别模型:
class Category
include Mongoid::Document
belongs_to :catalog
has_many :category_items
# fields go here
# validations go here
def add_existing_items(inputs)
if inputs[:category_item_ids] && inputs[:category_item_ids].kind_of?(Array)
inputs[:category_item_ids].each do |category_item_id|
category_item = CategoryItem.find(category_item_id)
new_item = category_item.dup
new_item.category = self
new_item.save!
# 'new_item' document gets saved successfully
# But the below call to class method of another class fails! Why?
Metadata.update_or_add_metadata(new_item, true)
end
end
end
end
元数据模型:
class Metadata
include Mongoid::Document
include Mongoid::Timestamps
# fields go here
# validations go here
belongs_to :outlet
# instance methods go here
class << self
def update_or_add_metadata(item, create_new_boolean)
# do the updating work
end
end
end
为什么我会看到这个问题?我该如何解决这个问题?
答案 0 :(得分:2)
问题是,当您放置行Metadata.update_or_add_metadata(new_item, true)
时,它默认引用类Mongoid::Relations::Metadata
,而不是您定义的类Metadata
。
因此,您需要使用范围解析运算符Metadata
为您的::
类提供实际路径。那就不会有任何问题。 update_or_add_metadata
单例方法在您定义的类Metadata
的单例类中定义,而不是在Mongoid::Relations::Metadata
类的单例类中定义。