Rails 5 - использование синтетических атрибутов в запросах? - PullRequest
0 голосов
/ 01 мая 2018

Я не уверен, что синтетические атрибуты можно использовать таким образом, но у меня есть модель аккаунта с двумя логическими полями: is_class_accout и: is_expense_account.

Я создал атрибут, который не сохраняется в базе данных с именем: is_synthetic, который возвращает true, если либо: is_class_account равно true, либо: is_expense_account равно true.

Что я хочу сделать, так это написать запрос:

Account.find_by_project_id (project_id) .where (is_synthetic: true)

Это возвращает ошибку PG, потому что результирующий запрос ищет поле is_synthetic в БД, и, конечно, его там нет.

Я что-то не так делаю, или это ожидаемое поведение?

Код, который я использую:

class Account < ApplicationRecord
attribute :is_synthetic, :boolean
def is_synthetic
 self.is_class_account || self.is_expense_account
end

1 Ответ

0 голосов
/ 02 мая 2018

Поведение ожидается. Две вещи здесь:

  1. Пример запроса неверен, поскольку find_by_project_id возвращает первую соответствующую запись учетной записи, а не коллекцию для вызова , где on.

  2. В вашем случае все, что вам нужно сделать, это получить записи об учетной записи, а затем отфильтровать их:

    class Account < ApplicationRecord
      def is_synthetic
        self.is_class_account || self.is_expense_account
      end
    end
    
    # Returns an Array of accounts
    Account.where(project_id: <queried_project_id>).select(&:is_synthetic)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...