Не простая корзина, нужен экспертный ответ - PullRequest
0 голосов
/ 16 марта 2012

Я так удивлен, что получил -1 за мои вопросы. Они не простые, они сложные.
В моей таблице line_items есть product_id cart_id order_id Всякий раз, когда покупатель нажимает на товар, он добавляется в корзину. Но моя квартира, машины, турпакет не продукты. Кто бы ни думал, что каким-то образом я могу подключить к продуктам мои машины, квартиры скажут мне. У них принципиально разные атрибуты. Когда клиенты нажимают на квартиры и выбирают 2 спальни, скажем, как я могу добавить к line_items мой apartment_id или car_id или tour_id. Пожалуйста, мне не нужна теория о ИППП или множественном наследовании. Мне нужен именно ответ. Спасибо за эксперт по рельсам.

1 Ответ

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

Прежде всего вы должны отформатировать свой вопрос в соответствии с SO рекомендациями, возможно, потому что вы получаете отрицательные голоса ...

В любом случае, я думаю, вы ищете полиморфные ассоциации .

Предполагается, что Product означает продукт, доступный в вашем магазине, а LineItem представляет продукт в заказе:

class LineItem < ActiveRecord::Base
  has_one :product  # ONE LineItem references ONE product in the shop
  belongs_to :cart  # respectively belongs_to :order
end

class Cart < ActiveRecord::Base
  has_many :line_items  # ONE Cart HAS MANY LineItems
end

class Product < ActiveRecord::Base
  belongs_to :buyable, :polymorphic => true

  # here you would have general attributes representing a product, e.g. 'name'
end

class Car < ActiveRecord::Base
  has_one :product, :as => :buyable

  # here you would have specific attributes in addition to the general attributes in
  # product, e.g. 'brand'
end

class Apartment < ActiveRecord::Base
  has_one :product, :as => :buyable

  # here you would have specific attributes in addition to the general attributes in
  # product, e.g. 'address'
end

Чтобы это работало, ваша таблица products должна иметь два столбца

  • buyable_type (строка)
  • buyable_id (целое число)

Таким образом, в своем коде вы можете проверить, что именно ваш продукт, выполнив

@product = Product.find(params[:id])

if @product.buyable.is_a? Car
  puts @product.buyable.brand
elsif @product.buyable.is_a? Apartment
  puts @product.buyable.address
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...