使用关联字段进行范围内的计算

时间:2019-01-03 07:06:57

标签: ruby-on-rails

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 []>

该怎么写?

2 个答案:

答案 0 :(得分:0)

范围不在对象的实例上执行,它们基本上是类方法。通过在您的范围内使用another,您并没有真正指出要获得ThisTable的目标。就像您打了Another一样-它不起作用。

答案 1 :(得分:0)

scope只是定义类方法。因此,在范围内考虑的self始终是ThisTable类对象,即ActiveRecord Relation对象。

在这里,您在本身为类another的自身作用域内调用了ThisTableThisTable类对象的关联方法)。