Получить область изнутри модели в ActiveRecord - PullRequest
2 голосов
/ 06 марта 2012

В настоящее время я создаю запрос, подобный следующему:

account.sales.method_needing_more_account_info(account)

Я хочу иметь возможность определять учетную запись на основе уже существующей области, упрощая вызовы методов до чего-то вроде этого:

account.sales.method_pulling_account_from_scope

Я делаю это, поскольку модель учетной записи содержит определенные параметры, которые определяют способ представления данных о продажах и изменяют запросы в соответствии.

1 Ответ

2 голосов
/ 15 марта 2012

Области применения - это методы класса , и поэтому они не знают о переменных и атрибутах экземпляра. Чтобы выполнить то, что вы просите, вы должны придерживаться своего первого примера кода.

Альтернативой было бы написать метод, который возвращает данные

Рельсы 2

# returns an array of results
def more_account_info
  self.sales.all(:conditions => [])
end

# i've also added an initializer to allow for returning a scope before
# details here: http://railscasts.com/episodes/112-anonymous-scopes
class ActiveRecord::Base
  scope :conditions, lambda { |*args| {:conditions => args} }
end

# which allows for me to return a scoped object (chainable)
def more_account_info
  scope = Account.scoped({})
  scope = scope.sales
  scope = scope.conditions ""
end

или в рельсах 3 вы можете вернуть объект Arel (цепной)

Рельсы 3

# returns an arel object rather than an array of results
def more_account_info
  self.sales.where("")
def
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...