2015-07-02 4 views
0

Пакет состоит из расхода, дохода и баланса, которые основаны на продажах, которые сделаны из суммы. Как я могу добавить каждый @sale.amount в @package.revenue?Передача значения от дочернего класса до родителя

Модель package.rb:

class Package < ActiveRecord::Base 
    has_many :sales 
end 

Модель sale.rb:

class Sale < ActiveRecord::Base 
    belongs_to :package 
end 

routes.rb:

Rails.application.routes.draw do 
    resources :packages do 
    resources :sales do 
    end 
    end 
end 
+0

Вы можете сформулировать связь между '@ sale.amount' и' @ package.revenue'? – bhanu

ответ

0

ActiveRecord имеет удобный sum метод расчета сумма значений в колонка:

class Package < ActiveRecord::Base 
    has_many :sales 

    def revenue 
    sales.sum(:amount) 
    end 
end 

Обратите внимание, что в то время как он похож на sales.map(&:amount).sum его производительность будет значительно лучше, потому что ActiveRecord позволит база данных сделать расчет, а затем получить только одно значение (конечная сумма) из базы данных, в то время как другой метод будет извлекать каждую связанную запись из базы данных (которой может быть много тысяч), создать экземпляр объекта Sale для каждого из них, затем получить amount из каждого объекта Sale и, наконец, рассчитать сумму.

0
class Package < ActiveRecord::Base 
    has_many :sales 

    def revenue 
    sales.map(&:amount).sum 
    end 
end 
+0

Может быть, пример, соответствующий названию вопроса? –

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