Я получаю сообщение об ошибке при попытке вызвать метод беспокойства в методе моделей. У меня есть несколько проблем, и я настроил их таким же образом. Странно то, что один метод работает, а другой - нет. Вот мой код.
param_set.rb
class ParamSet < ApplicationRecord
include Searchable
include Comparable
def self.import(file, user_id, group_id = 1, project_id = nil)
param_set_ids_map = {}
yml = YAML.load_file(file)
yml.each do |component, elements|
case component
when 'param_sets'
elements.each do |importing_attributes|
old_param_set_id = importing_attributes.delete('id')
importing_attributes['user_id'] = user_id
importing_attributes['group_id'] = group_id
importing_attributes['project_id'] = project_id
ParamSet.search(User.first, {search: "test"})
ParamSet.compare(importing_attributes)
end
end
end
param_set_ids_map
end
end
comparable.rb
module Comparable
extend ActiveSupport::Concern
module ClassMethods
def compare(importing_attributes)
logger.debug "Works!"
end
end
end
searchable.rb
module Searchable
extend ActiveSupport::Concern
module ClassMethods
def search(current_user, params, visible: true)
results = paged_filter(current_user, params[:scope], params[:page] || 1)
results = results.visible if visible
results.where!("lower(name) LIKE lower(?) OR lower(description) LIKE lower(?)", "%#{params[:search]}%", "%#{params[:search]}%")
if params[:order].blank?
results.order!('updated_at DESC')
else
results.order!(params[:order])
end
results.reverse_order! if params[:reverse] == 'true'
results || []
end
end
end
Я получаю ошибку:
undefined method `compare' for #<Class:0x000056167cb01718>
Метод ParamSet.search(User.first, {search: "test"})
работает find и не выдает ошибку. Однако метод ParamSet.compare(importing_attributes)
дает ошибку. Я не знаю, что происходит и в чем разница между вызовом двух рассматриваемых методов в методе модели.
Кто-нибудь может объяснить, что происходит?