设置铁路采购模式的最佳方式

时间:2014-12-11 02:02:34

标签: ruby-on-rails product

我一直在设置我的导轨存储过程时遇到问题。我有一些像我希望能够购买的歌曲和视频模型。我创建了一个购买模型,可以跟踪每个用户购买的内容。我希望能够在下载页面上显示用户购买。我认为最好的方法是创建产品模型并创建与歌曲或视频的关联。

我进行了设置,以便在歌曲模型的创建之后创建产品模型。这是我的模特

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只是视频

我正在考虑做一些逻辑并在产品模型上放置一个类别列,但是认为这可能效率不高?

1 个答案:

答案 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