2013-12-09 3 views
0

Пусть у меня есть 3 модели, как это (не уверен, если это правильно):Борясь с has_many: через

class User < ActiveRecord::Base 
    has_many :lessons 
    has_many :points, through: :progress 
end 

class Progress < ActiveRecord::Base 
    belongs_to :user 
    has_many :lessons 
end 

class Lesson < ActiveRecord::Base 
    belongs_to :progress 
end 

(. Таблица Прогресс имеет user_id и lesson_id поля)

Как бы я сделать так что вызов @user.points вернет количество записей в таблицу Progress. Кроме того, как мне построить отношения?

ответ

0
class User < ActiveRecord::Base 
    has_many :progresses 
    has_many :lessons, through: :progresses 
end 

class Progress < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :lesson 
end 

class Lesson < ActiveRecord::Base 
    has_many :progresses 
end 
+0

То, что я опубликовал в своем ответе, будет работать с прогрессивной таблицей, содержащей user_id и lesson_id. user.progresses вернет весь прогресс, который имеет user_id как user.id – usha

0

Во-первых, вам нужно создать ассоциацию для progress на вашей User модели, так что through ассоциация будет работать:

class User < ActiveRecord::Base 
    has_many :lessons 
    has_many :progress 
    has_many :points, through: :progress 
end 

Затем вам необходимо определить метод (или отношение) points на вашем столе Progress. Или, если вы просто хотите подсчет записей, вы можете сделать: @user.points.size

+0

Как бы это сделать, если в таблице 'Progresses' есть' user_id' и 'lesson_id'? – Tim

+0

Не уверен, что я понимаю ваш вопрос. Если у вас есть оба из них, то отношение в таблице 'User' будет' принадлежит_то' или 'has_one'. – CDub

+0

Извинения, проблема решена. – Tim

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