ROR协会问题

时间:2011-09-03 10:14:41

标签: ruby-on-rails-3 activerecord

我遇到了问题,我有两个型号

class Department < ActiveRecord::Base
belongs_to :school
has_many  :courses
end

class Course < ActiveRecord::Base
has_many   :users
has_many   :departments
end   

我的迁移

class CreateCourses < ActiveRecord::Migration
...
t.string   :course_name
t.string   :course_code
t.integer  :department_id
...

 class CreateDepartments < ActiveRecord::Migration
  t.string    :department_name
  t.integer   :department_duration
   t.string   :department_code
  t.integer   :school_id

请问我如何获取课程所属的部门名称,这就是我所拥有的

 <% @courses.each do |course| %>
<%= course.department_name %>

给出

undefined method `department_name' for #<Course:0x43bb280>

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

从您的迁移中看,您的课程模型应该具有belongs_to :department语句而不是has_many :departments语句。

假设这就是你的意思,你得到那个特定错误信息的原因是因为你的课程模型没有部门名称(那会很奇怪吗?这是一门课程,而不是一个部门)。 但它确实属于一个部门,而该部门有一个名称。这样,您可以像这样编写代码:

<% @courses.each do |course| %>
  <%= course.department.department_name %>
<% end %>

这将从课程中获得相关部门,然后向部门询问其名称。

如果您执行此类操作,建议您确保在数据库查询中包含部门(在相应的控制器中)。否则,您最终会得到代码,该代码针对上述循环的每次迭代运行至少一个数据库查询。

另外,我只需要调用部门名称name的列,因为它属于一个单独的表。这样您就可以编写course.department.name而不是course.department.department_name