类别has_many视频,视频belongs_to_many类别

时间:2016-10-21 17:13:24

标签: ruby-on-rails model-associations

我做的像9gagtv风格的小视频网站 并且网站中的视频有一个类别,因此用户可以找到所有技术视频 但有些视频属于_to_many类别,比如视频是关于技术的,但也很有趣所以它会出现在两个类别的视频中,我不知道该怎么做? 它会在视频表中需要多个t.references吗?这段关系会怎样?

category.rb

class Category < ApplicationRecord
has_many :videos
end

video.rb

class Video < ApplicationRecord
belongs_to :category
end

类别迁移

class CreateCategories < ActiveRecord::Migration[5.0]
def change
create_table :categories do |t|
    t.string :title
  t.timestamps
end
end
end

视频迁移

class CreateVideos < ActiveRecord::Migration[5.0]
def change
create_table :videos do |t|
    t.string :url
    t.string :title
    t.text :description
    t.integer :duration
    t.references :category, foreign_key: true
  t.timestamps
  end
 end
end

2 个答案:

答案 0 :(得分:1)

您可以使用has_and_belongs_to_many 通过第三个表创建多对多关联。

型号:

class Category < ApplicationRecord
  has_and_belongs_to_many :videos
end

class Video < ApplicationRecord
  has_and_belongs_to_many :categories
end

迁移:

class CreateCategories < ActiveRecord::Migration[5.0]
  def change
    create_table :categories do |t|
      t.string :title
      t.timestamps
    end
  end
end

class CreateVideos < ActiveRecord::Migration[5.0]
  def change
    create_table :videos do |t|
      t.string :url
      t.string :title
      t.text :description
      t.integer :duration
      t.timestamps
    end
  end
end

class CreateCategoriesVideos < ActiveRecord::Migration[5.0]
  def change
    create_table :categories_videos do |t|
      t.references :category, index: true
      t.references :video, index: true
    end
  end
end

答案 1 :(得分:0)

我认为你要找的是 has_and_belongs_to_many 关系(see more

看起来应该是那样的

分类

class Category < ApplicationRecord
  has_and_belongs_to_many:videos
end

视频

class Video < ApplicationRecord
  belongs_to :category
end

迁移

class CreateCategoriesVideosJoinTable < ActiveRecord::Migration
  def change
    create_table :categories_videos, id: false do |t|
      t.integer :category_id
      t.integer :video_id
    end
  end
end