2015-10-17 3 views
0

У меня есть таблица пользователя и рецензента.Настройка ассоциации для has_one, которая является самореферентной

Рецензент треков user_id и reviewer_id

теперь моя ассоциация настроена так:

# reviewer 
    has_one :reviewer 
    accepts_nested_attributes_for :reviewer 
    has_many :active_managements, class_name: 'Reviewer', 
           foreign_key: 'reviewer_id', 
           dependent: :destroy 
    has_one :my_reviewer, through: :reviewer, source: :user 

что я пытаюсь настроить, что пользователь может иметь один рецензент, но может пересмотреть многие.

Теперь я пытаюсь сделать так, что я могу сделать

current_user.my_reviewer.first_name 

f.ex и получить первое имя рецензента текущего пользователя. Однако в настоящее время

has_one :my_reviewer, through: :reviewer, source: :user 

просто подходит к вам. Я думаю, что это связано с источником. Если я пытаюсь изменить его на: рецензент я получаю эту ошибку:

Could not find the source association(s) :reviewer in model Reviewer. Try 'has_many :my_reviewer, :through => :reviewer, :source => <name>'. Is it one of user or reviewer_user? 

и если я изменю его reviewer_user

Я получаю эту ошибку:

PG::UndefinedColumn: ERROR: column reviewers.reviewer_user_id does not exist 
LINE 1: ... "users" INNER JOIN "reviewers" ON "users"."id" = "reviewers... 
                  ^
: SELECT "users".* FROM "users" INNER JOIN "reviewers" ON "users"."id" = "reviewers"."reviewer_user_id" WHERE "reviewers"."user_id" = $1 LIMIT 1 
+0

вам нужно has_many: через я думаю, –

+0

я действительно есть, что только has_one –

+0

@ArupRakshit что только получает объект рецензента –

ответ

0

рецензенты Пользователи, не так ли? Так почему бы не просто избавиться от таблицы рецензента и сделать это:

# user 

has_many :reviewees, class_name: "User", foreign_key: "my_reviewer_id" 
belongs_to :my_reviewer, class_name: "User" 
+0

вам также придется мигрировать: '' 'rails g migration AddReviewerToUsers my_reviewer_id: integer''' – laertiades

Смежные вопросы