You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中Movie模型的has_many自关联实现及相关操作咨询

Rails实现Movie模型的自关联推荐影片功能

要实现影片关联多个同类型推荐影片的功能,需要通过自关联多对多的方式搭建,以下是具体步骤:

1. 创建连接表迁移

首先需要生成中间连接表,存储影片与推荐影片的关联关系。

运行迁移生成命令:

rails generate migration CreateMovieRecommendations movie:references recommended_movie:references

打开生成的迁移文件(路径:db/migrate/[timestamp]_create_movie_recommendations.rb),补充唯一性索引避免重复关联:

class CreateMovieRecommendations < ActiveRecord::Migration[7.0]
  def change
    create_table :movie_recommendations do |t|
      t.references :movie, null: false, foreign_key: true
      t.references :recommended_movie, null: false, foreign_key: { to_table: :movies }

      t.timestamps
    end

    # 添加唯一性索引,防止同一影片重复推荐同一部电影
    add_index :movie_recommendations, [:movie_id, :recommended_movie_id], unique: true
  end
end

执行迁移:

rails db:migrate

2. 设置模型关联

在app/models/movie.rb中定义自关联关系,同时创建中间模型MovieRecommendation:

Movie模型

class Movie < ApplicationRecord
  # 关联当前影片发起的推荐记录
  has_many :movie_recommendations, foreign_key: :movie_id, dependent: :destroy
  # 通过推荐记录关联到推荐影片
  has_many :recommended_movies, through: :movie_recommendations, source: :recommended_movie

  # 可选:反向关联,查看哪些影片推荐了当前影片
  has_many :reverse_movie_recommendations, class_name: 'MovieRecommendation', foreign_key: :recommended_movie_id, dependent: :destroy
  has_many :recommended_by_movies, through: :reverse_movie_recommendations, source: :movie
end

MovieRecommendation模型

创建app/models/movie_recommendation.rb:

class MovieRecommendation < ApplicationRecord
  belongs_to :movie
  belongs_to :recommended_movie, class_name: 'Movie'
end

3. 添加与管理推荐影片

添加推荐

直接通过关联方法为影片添加推荐:

# 假设已有两个影片实例
movie1 = Movie.find(1)
movie2 = Movie.find(2)

# 为movie1添加movie2作为推荐影片
movie1.recommended_movies << movie2

# 批量添加多个推荐影片
movie1.recommended_movies << [movie3, movie4]

查询推荐列表

# 获取movie1的所有推荐影片
movie1.recommended_movies

# 获取推荐了movie2的所有影片
movie2.recommended_by_movies

移除推荐

# 移除movie1对movie2的推荐
movie1.recommended_movies.delete(movie2)

内容的提问来源于stack exchange,提问作者Michael E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:50:31