Проблема с ассоциациями моделей Rails - PullRequest
1 голос
/ 08 февраля 2011

У меня есть 3 модели, но ассоциация немного сложная.

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

Дело также в том, что у каждого Учителя есть 1 Ученик.

Итак, я сделал такие модели;

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, это выдает ошибку No Method.

НО

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

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

Есть ли способ достичь этого?

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

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

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Решено!: D

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

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

0 голосов
/ 08 февраля 2011

Вы хотите изменить отношение с has_one на assign_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...