Я работаю над реализацией доставки для процесса оформления заказа.
В моем приложении есть тележки, cart_items, заказы и order_items.
Вес и размер всех предметов есть в базе данных, и я вычисляю total_weight для моделей заказа и корзины.У меня также есть модель shipping_service с weightmin и weightmax для каждой службы доставки + модель почтовой зоны и страны (страны).
Теперь я хотел бы показать на странице корзины только те службы доставки, которые соответствуютвес корзины или заказа.
Полагаю, мой carts_controller должен выглядеть примерно так:
class CartsController < ApplicationController
def show
@cart = Cart.find(params[:id])
@lands = Land.find(:all)
@shippingservices = Shippingservice.where('@cart.total_weight BETWEEN ? AND ?', :weightmin, :weightmax)
end
Моя модель корзины:
class Cart < ActiveRecord::Base
attr_accessor :total_weight
has_many :cart_items
has_many :products, :through => :cart_items
has_many :lands
has_many :shipping_services, :through => :postzones
def total_weight
cart_items.inject(0) {|sum, n| n.weight * n.amount + sum}
end
end
Моя модель земли
class Land < ActiveRecord::Base
has_many :shippingservices, :through => :postzones
has_many :postzones
has_many :carts
end
Моя модель shipping_service:
class Shippingservice < ActiveRecord::Base
has_many :lands, :through => :postzones
has_many :postzones
has_many :carts
has_many :orders
end
Моя модель postzone:
class Postzone < ActiveRecord::Base
belongs_to :shippingservice
belongs_to :land
end
Таблица postzone содержит внешние ключи для земель и shipping_services.
Позже я хотел бы реализовать два поля селектора: одно для ship_to_countries и одно для shipping_services, причем второй селектор заполняется только записями, относящимися к записи, выбранной в первом селекторе.
У меня уже было эторабота внутри carts_controller:
@shippingservices = Shippingservice.includes(:lands, :postzones).where('postzones.land_id = ?', Land.first.id)
, который загружает во второй селектор только службы доставки для определенной страны.Но я не знаю, как объединить два предложения where относительно веса и постзоны в один запрос.
Любая помощь очень ценится!
Заранее спасибо.