Рельсы касаются неопределенной ошибки метода - PullRequest
0 голосов
/ 03 июля 2018

Я получаю сообщение об ошибке при попытке вызвать метод беспокойства в методе моделей. У меня есть несколько проблем, и я настроил их таким же образом. Странно то, что один метод работает, а другой - нет. Вот мой код.

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) дает ошибку. Я не знаю, что происходит и в чем разница между вызовом двух рассматриваемых методов в методе модели.

Кто-нибудь может объяснить, что происходит?

1 Ответ

0 голосов
/ 03 июля 2018

Когда вы делаете

include Comparable

вы включаете модуль Comparable в ruby, а не свой собственный Этот модуль не имеет compare метода.

Попробуйте изменить имя вашего модуля ...

module Matchable

и файл на matchable.rb

, а затем

include Matchable

И с тобой должно быть все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...