원인을 알기 위해서는 guild_invitation 의 마이그레이션 파일과 위에있는 guild_invitation.rb 를 봐야한다.
# migration
class CreateGuildInvitations < ActiveRecord::Migration[6.1]
def change
create_table :guild_invitations do |t|
t.references :user, null: false, foreign_key: true
t.references :guild, null: false, foreign_key: true
t.references :invited_user, null: false, references: :users, foreign_key: { to_table: :users }
t.string :result, null: false, default: "pending"
t.timestamps
end
end
end
guild_invitation 은 자신의 속성으로 초대를 한 유저, 초대를 받은 유저 처럼 필연적으로 같은 테이블이 다른 이름으로 들어가야함을 알 수 있다. 우리는 초대를 한 유저는 user고 초대를 받은 유저는 invited_user 가 된다.
마이그레이션 파일을 보면 invited_user 를 레퍼런스 로 받는데 invited_user 에 해당하는 모델이 없으므로 references 라는 옵션으로 users 에 연결한 걸 확인할 수 있다.
guild_invitation.rb 파일을 보면 belongs_to :invited_user, class_name: "User" 라는 문구가 있다. 그리고 user.rb 에서 has_many :guild_invitations, foreign_key: "invited_user_id" 가 있다.
즉 user 레코드를 이용해 guild_invitation 에 접근하기 위해서 사용하는 레퍼런스는 user 가 아니라 invited_user 였던것.