Another
的字段为some_field
。
ThisTable
belongs_to
Another
并具有字段local_field
。
现在,我想为some_filter
编写范围ThisTable
:
scope :some_filter, ->(var_in) {
tmp1 = calc_sth(another.some_field, var_in)
tmp2 = calc_sth_else(another.some_field, var_in)
where(local_field: tmp1..tmp2)
}
我遇到了错误undefined local variable or method 'another' for #<ActiveRecord::AssociationRelation []>
该怎么写?
答案 0 :(得分:0)
范围不在对象的实例上执行,它们基本上是类方法。通过在您的范围内使用another
,您并没有真正指出要获得ThisTable
的目标。就像您打了Another
一样-它不起作用。
答案 1 :(得分:0)
scope
只是定义类方法。因此,在范围内考虑的self
始终是ThisTable
类对象,即ActiveRecord Relation对象。
在这里,您在本身为类another
的自身作用域内调用了ThisTable
(ThisTable
类对象的关联方法)。