много ко многим отношениям для применения фильма - PullRequest
2 голосов
/ 22 сентября 2019

Я создаю приложение, в котором пользователь может создавать публикации фильмов, а также избранные публикации фильмов других пользователей.Меня смущает вопрос о том, как следует устанавливать отношения «многие ко многим» в бэкэнде rails.

У пользователя есть много фильмов, а также может быть много избранных (которые являются публикациями фильмов, но они просто нажимаюткнопка, чтобы добавить их в свой раздел избранного), и многие пользователи могут добавить в избранное один и тот же фильм.

То, как у меня сейчас настроены отношения и модели .....

class CreateFavorites < ActiveRecord::Migration[5.2]
   def change
    create_table :favorites do |t|
      t.integer :user_id
      t.integer :movie_id
     end
   end
end

 class Favorite < ApplicationRecord
    belongs_to :user
 end

  class Movie < ApplicationRecord
      belongs_to :user
      has_many :comments
      belongs_to :favorite
  end

 class CreateMovies < ActiveRecord::Migration[5.2]
    def change
       create_table :movies do |t|
       t.string :name
       t.string :genre
       t.string :rating
       t.string :image
       t.string :watch_link
       t.integer :user_id
     end
   end
end

 class User < ApplicationRecord
    has_secure_password
    has_many :movies
    has_many :comments
    has_many :favorites
  end

  class CreateUsers < ActiveRecord::Migration[5.2]
     def change
       create_table :users do |t|
       t.string :name
       t.string :email
       t.string :username
       t.string :password_digest
    end
  end
end

1 Ответ

1 голос
/ 23 сентября 2019

Вы можете создать ассоциацию избранного между моделями User и Movie, используя has_many :through

class User < ApplicationRecord
  has_many :movies
  has_many :favorite_movies, class_name: 'Favorite', foreign_key: 'user_id'
  has_many :favorites, through: :favorite_movies, source: :movie
end

class Movie < ApplicationRecord
  belongs_to :user
end

class Favorite < ApplicationRecord
  belongs_to :user
  belongs_to :movie
end

Это должно работать таким образом.

Теперь вы можете получить избранное пользователякак это: User.first.favorites

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...