2013-08-03 3 views
1

Я потерян во всех вариантах возможностей Rails.Rails-ассоциация с настраиваемыми полями

У меня есть стол для Users. У этих Users есть Products. Это просто отношение has_many :products.

Однако я хочу предоставить пользователям список продуктов. Они выберут ряд продуктов и добавят к ним цену.

Так в основном, у меня есть

USER 1 -----> PRODUCT 1 ------> PRICE 1 <----. 
     -----> PRODUCT 2 ------> PRICE 2   | 
USER 2 -----> PRODUCT 1 ------> PRICE 3 <----¨ 
     -----> PRODUCT 3 ------> PRICE 4 

Должен ли я создать три таблицы: User, Product и Price?

А что, если пользователь хочет настроить свой продукт больше с количеством, потребностью и т. Д.? Тогда я должен создать следующие таблицы вместо: User, Product и ProductDetail

Таким образом достигается userhas_many :product и producthas_many :product_detail.

Что такое Rails?

Я потерял со всеми has_many, has_one, has_many :through и т.д.

ответ

1

Я хотел бы создать следующее:

class User 
    has_many :purchases 
end 

class Product 
    has_many :purchases 
end 

class Purchase 
    belongs_to :user 
    belongs_to :product 

    # mongoid syntax, if using ActiveRecord, use a migration 
    field :quantity, type: Integer, default: 0 
    field :price, type: Float, default: 0.0 
end 

user = User.new 
apple = Product.new 
tea = Product.new 
chocolate = Product.new 

user.purchases.build(product: apple, price: 2.99, quantity: 1) 
user.purchases.build(product: tea, price: 5.99, quantity: 2) 
user.purchases.build(product: chocolate, price: 3.99, quantity: 3) 

FYI: Этот вид отношений между User, Product и Purchase подобен a has_and_belongs_to_many. При использовании has_and_belongs_to_many рельсы просто связывают классы, как указано выше. Здесь мы делаем это сами, чтобы настроить класс Purchase с quantity и price.

+0

Благодарим вас за подробный ответ. Это кажется довольно простым в реализации. –

+1

Рад, что это вам помогло, подумайте о принятии ответа. Получайте удовольствие от Rails. –

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