ROR Ассоциация проблема - PullRequest
       0

ROR Ассоциация проблема

0 голосов
/ 03 сентября 2011

У меня проблема, у меня две модели

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 голосов
/ 04 сентября 2011

Из ваших миграций выглядит так, как будто ваша модель курса должна иметь оператор belongs_to :department вместо оператора has_many :departments.

Предполагая, что это именно то, что вы имели в виду, причина, по которой вы получаете это конкретное сообщение об ошибке, заключается в том, что ваша модель курса не имеет названия отдела (это было бы странно, верно? Это курс, а не отдел). Это, однако, принадлежит отделу, и у отдела есть имя. Таким образом, вы можете написать свой код так:

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

Получит соответствующий отдел из курса, а затем спросит у отдела его название.

Если вы делаете что-то подобное, желательно также включить отделы в запрос к базе данных (в соответствующем контроллере). В противном случае вы получите код, который выполняет по крайней мере один запрос к базе данных для каждой итерации указанного выше цикла.

Кроме того, я бы просто назвал столбец для названия отдела name, поскольку он принадлежит отдельной таблице. Таким образом, вы бы написали course.department.name вместо course.department.department_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...