0

我有 3 个模型:

学生 - 班级 - Avaliation

我需要这样,当我将学生与课程相关联时,该学生通常与该特定课程的一个名称相关联。

一个班有很多学生。学生属于多个班级 一个学生有多个 avaliation 一个 Avaliation 属于一个学生和一个班级。

当我打开学生的 url 时,我需要显示在那里,以便我可以对学生进行评分。

我怎样才能做到这一点?

好的,这是我的 routes.rb

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

我可以让学生/1/classrooms/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')
4

1 回答 1

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

顺便说一句:也许你应该为你的“类”模型找到另一个名字。这可能会导致一些混乱;)

更新:上面的代码假设您的数据库结构中至少有以下列:

+-------------------------+
|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                |
|...                           |
+------------------------------+
于 2013-03-13T19:37:25.397 回答