2013-03-13 7 views
0

У меня есть 3 модели:Automaticly ассоциированные две модели рубин на рельсах

Student - Class - Avaliation

мне нужно, что, когда я ассоциировать студент с классом, студент altomatcly связан с одной лавинией для этого конкретного класса.

В классе много учеников. Студент относится ко многим классам Ученица имеет много цветов A Avaliation принадлежит одному ученику и одному классу.

Когда я открываю URL-адрес студенту, мне нужна лавина, чтобы его увидеть, поэтому я могу оценить ученика.

Как я могу это сделать?

Ok так что это мой routes.rb

resources :students do 
    resources :classrooms do 
    resources :avaliations 
    end 
end 

я могу получить студентов/1/классы/1/avaliation Но в моих студентов/показать страницу я попробовать это:

<p> 
    <b>Name:</b> 
    <%= @student.name %> 
</p> 

<h3>Class</h3> 
<% @student.classrooms.each do |classroom| %> 
    <%= classroom.name %> 
<% end %> 

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

SQLite3::SQLException: no such column: classrooms.graded: SELECT "classrooms".* FROM "classrooms" INNER JOIN "avaliations" ON "classrooms"."id" = "avaliations"."classroom_id" WHERE "avaliations"."student_id" = 1 AND ("classrooms"."graded" = 't') 

ответ

0

Непроверенные:

class Avaliation 
    belongs_to :student 
    belongs_to :class 
end 

class Class 
    has_many :avaliations 
    has_many :students, :through => :avaliations, :conditions => {:graded => true} 
end 

class Student 
    has_many :avaliations 
    has_many :classes, :through => :avaliations, :conditions => {:graded => true} 
end 

Btw: Может быть, вы должны найти другое название для своего "класса" -модели. Это может привести к некоторым путанице;)

Update: Приведенный выше код предполагает, что у вас есть по крайней мере, следующие столбцы в структуре базы данных:

+-------------------------+ 
|Student (table students) | 
|id: integer    | 
|....      | 
+-------------------------+ 

+------------------------------+ 
|ClassRoom (table class_rooms) | 
|id: integer     | 
|name:string     | 
|....       | 
+------------------------------+ 

+------------------------------+ 
|Avaliation (table avaliations)| 
|student_id:integer   | 
|class_room_id:integer   | 
|graded:boolean    | 
|...       | 
+------------------------------+ 
+0

то, что: тертые suposed быть? Я новичок в рельсах и логике программирования. Я обновил вопрос, вы можете помочь? – Allan

+0

Какова логика здесь? – Allan

+0

В приведенном выше фрагменте кода «градуированный» должен быть столбец табличных оценок. Я обновил ответ на примере того, как выглядят ваши таблицы. – jack

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