Использование поля ассоциации для расчета в области - PullRequest
0 голосов
/ 03 января 2019

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 голосов
/ 03 января 2019

scope - это не что иное, как определение методов класса . Таким образом, self рассматривается внутри области видимости всегда ThisTable Объект класса, т.е. объект отношения ActiveRecord.

Здесь вы вызвали another (метод ассоциации для ThisTable объекта класса) внутри области видимости себя, которая сама является классом ThisTable.

0 голосов
/ 03 января 2019

Области не выполняются на экземпляре объекта, это в основном методы класса.Используя another в своей области видимости, вы на самом деле не указываете, для какого ThisTable вы хотите получить Another.Это как если бы вы позвонили ThisTable.another - это не сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...