使用范围访问关联的类

时间:2018-08-09 13:29:57

标签: ruby-on-rails ruby activerecord associations rails-activerecord

class A
    scope :scope_name -> {scope_condition}
end

class B
  has_many :a
end

我是否需要通过B访问具有A范围的A ?,例如

当我致电B.last.a时,它应该获取B.last.a.scope_name的结果。

是否可以不使用default_scope或条件关联(has_many :a -> {scope_condition})来完成?

2 个答案:

答案 0 :(得分:0)

不,没有B上的default_scope,条件关系或实例方法就无法完成。

就像您说的那样,何时致电:

a_with_scope = B.find(1).a.scope_name

您将获得A的作用域版本,但是如果您想通过调用B.find(1).a找到完全相同的结果,则确实需要在模型A上设置默认作用域,或在关系上创建条件,或者在B上创建方法:

class B
  def a_scoped
   a.with_scope
  end
end

答案 1 :(得分:0)

您可以使用scoping将范围暂时应用于A:

A.scope_name.scoping do
  # some time later..
  B.last.a # this (and any other use of A) will be scoped with scope_name
  # ...
end

这将像默认作用域一样工作,具有许多相同的注意事项和陷阱,但它不在应用程序范围内。