2012-03-06 1 views
1

Я в настоящее время строит запрос следующим образом:Получить сферу внутри модели в ActiveRecord

account.sales.method_needing_more_account_info(account) 

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

account.sales.method_pulling_account_from_scope 

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

ответ

1

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

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

Рельсы 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 
+0

Рельсы 3 подходят вам, кажется, лучшим. Благодаря! – iterion

Смежные вопросы