2014-12-11 5 views
0

У меня возникли проблемы, обертывающие мою голову вокруг настройки процесса хранения рельсов. У меня есть некоторые модели, такие как песни и видеоролики, которые я хочу приобрести. Я создал модель покупки, которая будет отслеживать, что покупается каждым пользователем. Я хочу иметь возможность отображать покупки пользователей на странице загрузки. Я думал, что лучший способ сделать это - создать модель продукта и создать связь с песнями или видео.Лучший способ установки рельсов для покупки модели

У меня есть настройка, чтобы модель продукта была создана после создания на модели песен. Вот мои модели

class Product < ActiveRecord::Base 
    belongs_to :song 
    has_many :purchases 
end 
class Purchase < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :user 
end 
class Song < ActiveRecord::Base 
    belongs_to :user 
    has_one :product 
end 

Я хочу, чтобы иметь возможность перебрать покупки пользователей, которые песня или видео на странице загрузки @ user.purchases, которые только песни @ user.purchases, которые только видео

Я подумывал о том, где логика и разместить столбец категории на модели продукта, но думал, что это может быть неэффективно?

ответ

0

Я бы сохранил свои отношения между покупкой и обею песней и видео как полиморфные отношения. Посмотрите на это:

class Purchase < ActiveRecord::Base 
    has_many :items, as: :itemable 
    belongs_to :user 
end 

class Video < ActiveRecord::Base 
    belongs_to :itemable, polymorphic: true 
end 

class Song < ActiveRecord::Base 
    belongs_to :itemable, polymorphic: true 
end 

def User < ActiveRecord::Base 
    has_many :purchases 
end 

Теперь вы можете делать такие вещи, как это:

user = User.create 
purchase = Purchase.create 
video = Video.create 
song = Song.create 
purchase.items << video 
purchase.items << song 
user.purchases << purchase 

user.purchases.first.items 
=> [video, song] 

Вам нужно будет настроить файл переноса правильно. Взгляните на this documentation для получения дополнительной информации.