我有一个包含3个表的数据库。一个名为movie的表,具有2个值,我从themoviedb.org获得的唯一ID和标题。我还有一个名为users的表,该表具有名称值。我的第三个表是一个名为movies_users的联接表,看起来像这样,
class AddMoviesUsersJoinTable < ActiveRecord::Migration
def self.up
create_table :movies_users, :id => false do |t|
t.integer :movie_id
t.integer :user_id
end
end
def self.down
drop_table :movies_users
end
end
在我的movie.rb模型中
has_and_belongs_to_many: users
在我的users.rb模型中
has_and_belongs_to_many: movies
我的movies_controller.rb中的创建动作看起来像这样,
def create
respond_with Movie.create(movie_params.merge(user_id: current_user.id))
end
用户可以执行搜索操作,我将为他们提供从themoviedb.org获得的结果列表。Themoviedb还为他们的电影提供唯一的ID。
现在,当多个用户添加同一部电影时,我会获得它的多个记录。例如,我添加了带有两个帐户的电影《信条》,这就是我的Rails控制台显示的内容,
Movie id: 1, title: "Creed",user_id: 1, movie_id: "312221">
Movie id: 2, title: "Creed",user_id: 2, movie_id: "312221">
如何在1部电影和多个用户之间建立关系?
如何在1部电影和多个用户之间建立关系?
做这个:
#app/controllers/movies_controller.rb
class MoviesController < ApplicationController
def create
@movie = Movie.find_or_create_by movie_params
current_user.movies << @movie
end
def destroy
@movie = Movie.find params[:id]
current_user.movies.destroy @movie #-> only destroys association, not actual object
end
private
def movie_params
params.require(:movie).permit(:title, :movie_id)
end
end
如果一个@movie
新Movie
记录不存在,它将填充一个新记录,如果存在则拉相关记录。这将允许您将哈希添加@movie
到current_user.movies
哈希-此处描述的方法:
--
顺便说一句,您还需要注意其他事项。
您目前使用user_id
在你Movie
的模型。这将暗示一种belongs_to/has_many
关系-与您的模型相反。
如果只想has_and_belongs_to_many
在模型中使用,则需要user_id
从movies
表中删除外键-不需要它。
更新
$ rails c
$ user1 = User.find(1)
$ user1.movies #-> will output movies
$ user2 = User.find(2)
$ user2.movies #-> will output movies
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句