Несколько ссылок между двумя таблицами, один ко многим, а также многие ко многим - PullRequest
2 голосов
/ 27 мая 2019

Я только начал изучать RoR и решил создать сторонний проект, чтобы узнать больше. Я застрял на этой проблеме около недели: (

По сути, я пытаюсь установить отношения между двумя таблицами, пользователями и рецептами.

2 отношения должны сформироваться для целей моего приложения.

  1. рецепт создается пользователем, так что это связь один-ко-многим.
  2. пользователь может иметь любимые рецепты, а рецепт может быть одобрен несколькими пользователями. Итак, это ассоциация «многие ко многим».

Это то, что я сделал до сих пор.

модель пользователя

  has_many :recipes
  has_many :user_recipes
  has_many :recipe, through: :user_recipes

рецепт Модель

  belongs_to :user, dependent: :destroy
  has_many :user_recipes
  has_many :users, through: :user_recipes

user_recipes модель

  belongs_to :user
  belongs_to :recipe

файл миграции user_recipe

  t.belongs_to :recipe, index: true
  t.belongs_to :user, index: true

файл миграции рецепта

  t.belongs_to :user

Файл пользовательской миграции не имеет отношения к рецептам.

Из того, что я сделал. Я мог: 1. назначить пользователя рецепту (создателю) и проверить с помощью recipe.user 2. назначьте любимые отношения, используя recipe.users << user

Проблема когда я набираю user.recipes, он говорит мне, какие рецепты создал пользователь, а какие нет, какие рецепты ему нравятся. Я думаю, что должен быть лучший способ настроить моих сотрудников так, чтобы они могли правильно использовать все функции.

Буду признателен за всю помощь. Заранее спасибо!

1 Ответ

0 голосов
/ 27 мая 2019

Дайте псевдоним вашим созданным рецептам, чтобы вам не приходилось использовать «user.recipes» для доступа к нему.

Отредактируйте свою модель пользователя следующим образом:

замените вашустрока

has_many :recipes

с чем-то вроде этого:

has_many :created_recipes, foreign_key: :user_id, class_name: "Recipe"

Делая это, вы можете получить доступ к рецептам, созданным вашим пользователем, введя "user.created_recipes", и рецепты, которые понравятся вашему пользователю.набрав "user.recipes".

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