У меня есть 4 модели, User
, ImageSize
, Frame
и CartItem
. Модель CartItem содержит все идентификаторы для 3 предыдущих моделей, такОбщая сумма для связанных столбцов
class CartItem < ActiveRecord::Base
belongs_to :image_size
belongs_to :user
belongs_to :frame
end
create_table "cart_items", force: :cascade do |t|
t.integer "user_id"
t.integer "image_size_id"
t.integer "frame_id"
end
class User < ActiveRecord::Base
has_many :cart_items
end
Мой первый вопрос здесь это не кажется правильным, так как в моей установке ассоциации, но сейчас плохого адреса, что в другой раз.
В кадре и ImageSize есть столбец price
, и я пытаюсь получить сумму цены для Frame и ImageSize для текущего пользователя, чтобы я мог показать промежуточный итог для пользователя, который собирает сумму для всех картотеков
Не могли бы вы помочь с запросом или указать мне в правильном направлении, чтобы собрать эти данные?
Благодаря
Update
Что мне удалось собрать, но, конечно, Theres простой способ?
def show
@frame_total = CartItem.frame_price_total(current_or_guest_user)
@image_size_total = CartItem.image_size_price_total(current_or_guest_user)
@subtotal = CartItem.subtotal(@frame_total, @image_size_total)
end
class CartItem < ActiveRecord::Base
def self.frame_price_total(u)
@price_array = []
user = includes(:frame).where(user_id: u)
user.each do |f|
@price_array << f.frame.price
end
@price_array.sum
end
def self.image_size_price_total(u)
@price_array = []
user = includes(:image_size).where(user_id: u)
user.each do |f|
@price_array << f.image_size.price
end
@price_array.sum
end
def self.subtotal(image_size_total, frame_size_total)
total = image_size_total + frame_size_total
BigDecimal.new(total).to_s
end
end
спасибо за подсказку – Richlewis