Activerecord с использованием таблицы ссылок с дополнительной информацией - PullRequest
0 голосов
/ 18 марта 2011

У меня есть структура таблицы, которая использует таблицу ссылок для связи Заданий с людьми, таблица ссылок содержит данные о том, как долго человек находился на определенной работе.

Schema section EER Diagram

У меня есть простое приложение для рельсов, которое пытается найти все вакансии и отображает диапазоны дат занятости.

class Employment < ActiveRecord::Base
  belongs_to :person
  belongs_to :job
end

class Job < ActiveRecord::Base
  belongs_to :employer
  has_many :employment

  accepts_nested_attributes_for :employment
end

def index
  @jobs = Job.joins(:employment).find(:all)
end

Теперь, когда я пытаюсь получить доступ к свойствам "ship_started "/ закончилась, я получаю 'NoMethodError in Experience # index'

undefined method `employment_started' for #<Class:0x000000026927e0>

17:     <span><%=job.employment.employment_started%> - <%=job.employment.to_yaml%>

Когда я использую функцию 'to_yaml', я вижу, что в объекте есть данные:

!ruby/object:Employment attributes: job_id: 1 person_id: 1 employment_started: 2008-04-21 employment_ended: attributes_cache: {} changed_attributes: {} destroyed: false marked_for_destruction: false new_record: false previously_changed: {} readonly: false

Почему рельсы не могут получить доступ к этому атрибуту 3-го уровня?

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Как говорит Ришав, Job has_many :employments означает, что job.employments будет массивом.Таким образом, вы не можете получить доступ к атрибуту employment_started напрямую.

Следующий код должен возвращать один <p> со значением employment_started для каждого из заданий.

<% job.employments.each do |employment| %>
    <p><%= employment.employment_started %></p>
<% end %>
1 голос
/ 18 марта 2011

Когда у вас есть отношение has_many, вы получаете массив. Так в основном.

Плюс, должно быть has_one :employment или has_many :employments

если это отношение has_many, вы можете выполнить итерацию по массиву занятий, чтобы получить желаемый результат

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