首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从扩展关系模块中访问Rails类const

从扩展关系模块中访问Rails类const
EN

Stack Overflow用户
提问于 2015-04-30 09:29:38
回答 2查看 173关注 0票数 0

我有一个遗传/混合的脑残,想知道是否有人想要启发我。

我在整个应用程序中使用查询类来封装复杂的、特定于角色的查询。例如,可能有一个PostQuery类和一个PhotoQuery类。

我还有一个基本的查询类,它公开了诸如分页之类的泛型关系扩展。

我遇到的问题是,我想从基本关系方法中访问在including类中定义的常量,但无论我尝试过什么继承/包含组合,它都无法实现。

我已经在下面发布了一个简单的要点和一个简化的破碎示例。干杯。

https://gist.github.com/uberllama/9e69529b0d835902f33d

EN

回答 2

Stack Overflow用户

发布于 2015-04-30 11:22:58

基于我之前提出的一个问题的复杂解决方法-在基类中使用self.inherited(sub_klass)来调用sub_klass.const_get。然后使用它用子类的常量send define_method to sub_klass

Ruby Metaprogramming: Dynamically defining method based on child instance attribute

代码语言:javascript
复制
class BaseQuery

  ALLOWED_SORT_ATTRS = []

  def initialize(relation)
    @relation = relation.extending(Scopes)
  end

  def self.inherited(sub_klass)
    sub_klass.send(:define_method, 'allowed_sort_attrs') do
      sub_klass.const_get(:ALLOWED_SORT_ATTRS)
    end
    sub_klass.send(:define_method, 'scoped') do
      Scope.new(sub_klass)
    end
  end

  class Scope
    def initialize(klass)
      @klass = klass 
    end

    def sorted(sort_param, sort_direction)
      if klass.allowed_sort_attrs.include(sort_param)
        order("#{sort_param} #{sort_direction}")
      else
        order("id DESC")
      end
    end
  end

end
票数 0
EN

Stack Overflow用户

发布于 2015-05-01 21:59:48

现在,我决定只在方法中插入当前关系,以获得常量。

代码语言:javascript
复制
def sorted
  allowed_attr_names = "#{klass}Query".constantize.const_get(:ALLOWED_ATTR_NAMES)
end

在本例中,如果我在一个Post关系中,它将检索PostQuery::ALLOWED_ATTR_NAMES

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29957518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档