Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设置rails采购模型的最佳方法_Ruby On Rails_Product - Fatal编程技术网

Ruby on rails 设置rails采购模型的最佳方法

Ruby on rails 设置rails采购模型的最佳方法,ruby-on-rails,product,Ruby On Rails,Product,我在设置rails存储过程时遇到了一些问题。我有一些模型,如歌曲和视频,我希望能够购买。我创建了一个购买模型,可以跟踪每个用户购买的东西。我希望能够在用户的下载页面上显示用户购买的内容。我认为最好的方法是创建一个产品模型,并与歌曲或视频建立关联 我有它的设置,以便产品模型是在歌曲模型上创建后创建的。这是我的模型 class Product < ActiveRecord::Base belongs_to :song has_many :purchases end class

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

我有它的设置,以便产品模型是在歌曲模型上创建后创建的。这是我的模型

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仅为视频


我在考虑做一些where逻辑并在产品模型上放置一个category列,但我认为这可能没有效率

我会将购买与歌曲和视频之间的关系存储为多态关系。看看这个:

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]
您需要正确设置迁移文件。有关更多信息,请参阅