我一直在设置我的导轨存储过程时遇到问题。我有一些像我希望能够购买的歌曲和视频模型。我创建了一个购买模型,可以跟踪每个用户购买的内容。我希望能够在下载页面上显示用户购买。我认为最好的方法是创建产品模型并创建与歌曲或视频的关联。
我进行了设置,以便在歌曲模型的创建之后创建产品模型。这是我的模特
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 :(得分: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。