У меня есть вопросы об использовании: источник при создании ассоциаций в рельсах - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблема при настройке ассоциаций в моем проекте rails, и мне интересно, может ли кто-нибудь помочь мне с этим ??

У меня есть три модели: пользователь, комментарий и событие. И есть два типа пользователей: организация и волонтер. У меня проблема, когда я пытался заставить event.volunteers и volunteer.joined_events работать ... Вот как настраиваются модели:

class Comment < ApplicationRecord
    belongs_to :organization, class_name: "User"
    belongs_to :volunteer, class_name: "User"
    belongs_to :event
end
class User < ApplicationRecord
    has_many :organized_events, foreign_key: "organization_id", class_name: "Event"
    has_many :joined_events, through: :being_commented_comments, :source => :event
    has_many :commented_comments, foreign_key: "organization_id", class_name: "Comment"
    has_many :being_commented_comments, foreign_key: "volunteer_id", class_name: "Comment"
end

class Event < ApplicationRecord
    belongs_to :organization, class_name: "User"
    has_many :volunteers, through: :comments, source: "Volunteer"
    has_many :comments
end

И я продолжаю получать ошибки вроде:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "Event" in model Comment. Try 'has_many :joined_events, :through => :being_commented_comments, :source => <name>'. Is it one of organization, volunteer, or event?)

или

ActiveRecord::HasManyThroughOrderError (Cannot have a has_many :through association 'User#joined_events' which goes through 'User#being_commented_comments' before the through association is defined.)

и я думаю, что проблема возникает из-за того, что я недостаточно знаком с :source ... Любые предложения будут очень признательны! Спасибо!

1 Ответ

1 голос
/ 03 ноября 2019

При использовании has_many through: вы должны объявить ассоциацию, через которую вы проходите, до косвенной ассоциации:

class User < ApplicationRecord
  has_many :organized_events, foreign_key: "organization_id", class_name: "Event"
  has_many :being_commented_comments, foreign_key: "volunteer_id", class_name: "Comment"
  has_many :joined_events, through: :being_commented_comments, source: :event
  has_many :commented_comments, foreign_key: "organization_id", class_name: "Comment"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...