Ruby on rails 如何使用concern访问实例方法中的类方法(或变量)?
我需要访问关注点内实例方法中的类方法(在ClassMethods中定义) 我的大脑被融化了,我确信这是我做错的一件简单的事情 我需要访问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
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