2011-02-08 4 views
1

У меня есть 3 модели, но ассоциация немного сложна.Проблема с Rails Model Associations

Сначала у меня есть пользователи, и для двух разных типов пользователей у меня есть две разные модели профиля, которые являются Pteacher и Pstudent.

Вещь также у каждого Pteacher есть 1 Pstudent.

Так что я сделал такие модели;

class User < ActiveRecord::Base 
    validates_uniqueness_of :uname 
    has_many :pteachers 
    has_many :pstudents 
end 


class Pteacher < ActiveRecord::Base 
    has_one :pstudent 
    belongs_to :user 
end 

class Pstudent < ActiveRecord::Base 
    has_one :pteacher 
    belongs_to :user 
end 

И теперь, если я пройти первый выбор пользователя, чем при выборе Pteacher, чем при выборе Pstudent как User.pteacher.pstudent, он не дает мне ошибку метода.

НО

Если я выбираю Pteacher непосредственно, чем я могу выбрать Pstudent с Pteacher.pstudent.

Проблема в том, что я хочу, чтобы пройти через User=>Pteacher=>Pstudent

Есть ли способ для достижения этой цели?

Кстати, я узнаю, что я не могу связаться ни с одним из методов Pteacher, если я создам его из User. Например, если я пишу в Rails Console;

user = User.first #Which is a teacher 
user.pteachers #This line gives me all the info about that users pteacher 
#now funny part 
pt = user.pteacher #this works too as now i have pt as a Pteacher which have all the data i want 
pt.id #fails??? 
pt.name #fails??? 
pt.pstudent #fails??? 
pt #writes all info about pteacher which has id and name 
+1

has_many должно быть множественным, не так ли? Что произойдет, если вы просто используете User.pteacher? – re5et

+0

похоже работающий. Дело в том, что некоторые из них - учителя, некоторые из которых - студенты. Поэтому, если пользователь является учеником, чем User.pteacher возвращает пустой массив, но если пользователь является учителем, чем User.pteacher возвращает свой профиль. – gkaykck

+0

. Основная проблема, если я сначала выбираю пользователя, а не Pteacher rest. Но если я не касаюсь Пользователя, прямо выберите Pteacher, чем это работает. Проклятые рельсы! – gkaykck

ответ

0

решаемые его! : D

Проблема была в том, что я спрашиваю у пользователя. Претензии. Не существует 1 Pteacher, на самом деле это массив Pteachers. Поэтому User.Pteacher.first.Pstudent решил это.

Спасибо, ребята

0

Вы хотите изменить отношения с has_one на own_to для Pteacher. Попробуй и посмотри.

class Pstudent < ActiveRecord::Base 
    belongs_to :pteacher 
    belongs_to :user 
end 

А также, извлекать pteacher, как так:

user = User.first # Which is a teacher 
pt = user.pteachers.first # retrieving first teacher from list 
p pt # prints out attributes of pt 
+0

нет, спасибо в любом случае. Кстати, как я уже упоминал, речь идет не о взаимоотношениях между моими моделями, это должно быть что-то вроде рельсов, потому что я даже не могу делать User.Pteacher.id – gkaykck

+1

Это определенно что-то с вашим кодом, а не с каркасом. Было бы полезно, если бы вы опубликовали вывод, а не говорили «он не работает». –

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