Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用concern访问实例方法中的类方法(或变量)?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 如何使用concern访问实例方法中的类方法(或变量)?

Ruby on rails 如何使用concern访问实例方法中的类方法(或变量)?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我需要访问关注点内实例方法中的类方法(在ClassMethods中定义) 我的大脑被融化了,我确信这是我做错的一件简单的事情 我需要访问compariable\u opts内部comparison。我怎么做 下面是一些片段: 关心 # app/models/concerns/compare.rb module Compare extend ActiveSupport::Concern attr_accessor :comparable_opts module ClassMeth

我需要访问关注点内实例方法中的类方法(在ClassMethods中定义)

我的大脑被融化了,我确信这是我做错的一件简单的事情

我需要访问
compariable\u opts
内部
comparison
。我怎么做

下面是一些片段:

关心

# app/models/concerns/compare.rb
module Compare
  extend ActiveSupport::Concern

  attr_accessor :comparable_opts 

  module ClassMethods
    attr_reader :arguable_opts

    def comparable_opts
      @@comparable_opts
    end

    private
      def default_opts
        @default_opts ||= {fields: [:answers_count, 
                                      :answers_correct_count, 
                                      :answers_correct_rate, 
                                      :users_count]}
      end

      def compare(opts={})
        @comparable_opts = default_opts.merge(opts)
      end
  end

  def comparison
  end
end
模型

#app/models/mock_alternative.rb
类MockAlternative
解决方案: 我刚刚在我的方法
compare
中使用了
cattr\u访问器。谢谢大家

module Compare
  extend ActiveSupport::Concern


  module ClassMethods
    attr_reader :arguable_opts

    def comparison_klass
      "ActiveRecord::#{comparable_opts[:with].to_s.classify}".constantize
    end

    private
      def default_opts
        @default_opts ||= {fields: [:answers_count, 
                                      :answers_correct_count, 
                                      :answers_correct_rate, 
                                      :users_count]}
      end

      def compare(opts={})
        cattr_accessor :comparable_opts
        self.comparable_opts = default_opts.merge(opts)
      end
  end

  def comparison
    comparable_opts
  end
end
module Compare
  extend ActiveSupport::Concern


  module ClassMethods
    attr_reader :arguable_opts

    def comparison_klass
      "ActiveRecord::#{comparable_opts[:with].to_s.classify}".constantize
    end

    private
      def default_opts
        @default_opts ||= {fields: [:answers_count, 
                                      :answers_correct_count, 
                                      :answers_correct_rate, 
                                      :users_count]}
      end

      def compare(opts={})
        cattr_accessor :comparable_opts
        self.comparable_opts = default_opts.merge(opts)
      end
  end

  def comparison
    comparable_opts
  end
end