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})
来完成?
答案 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
这将像默认作用域一样工作,具有许多相同的注意事项和陷阱,但它不在应用程序范围内。