Я пытаюсь присоединиться к двум уже существующим таблицам «Отчет» и «Личность», создав новую таблицу соединений «LastViewer». В принципе, таблица Viewer будет отслеживать, какой человек последний раз просматривал отчет.Rails Model/Join table не работает должным образом
Я создал Rails модели, создав файл «last_viewer.rb», как это:
class LastViewer < ActiveRecord::Base
belongs_to :report
belongs_to :person
end
Это породило следующую миграцию:
class CreateLastViewers < ActiveRecord::Migration
def change
create_table :last_viewers do |t|
t.references :person
t.references :report
t.timestamps
end
add_index :last_viewers, :person_id
add_index :last_viewers, :report_id
end
end
Теперь, я начал добавлять код так, что мой приложение будет отслеживать изменения. Я добавил следующее к соответствующему контроллеру:
@viewer = LastViewer.new
@viewer.person_id = get_current_user[:id] # correctly gets the person's ID from the correct session
@viewer.report_id = @report.id
@viewer.save
И теперь, к мнению я хотел, чтобы отобразить последний зритель, я добавил:
<% @reports.each_with_index do |report,index| %>
<% query = LastViewer.where(:report_id => report.id).last %>
<% name = query.person.name || "No Person found" %>
<% time = Format.to_time(query.created_at.localtime) %>
<% end %>
Ошибки я получаю:
неопределенный метод `имя» для ноль: NilClass
на линии
<% name = query.person.name || "No Person found" %
Edit:
Соответствующая часть модели Person:
class Person< ActiveRecord::Base
attr_accessible :hid, :name, :email, :cell, :display
has_many :last_viewer
end
Соответствующая часть отчета модели:
class Report< ActiveRecord::Base
has_many :last_viewer
end
ли get_current_user [: идентификатор] ничего возвращать? Вы определили has_many: через ассоциации на ваших присоединенных моделях? – DiegoSalazar
Убедитесь, что ваша модель требует, чтобы оба внешних ключа успешно сохранялись: 'validates: report_id,: person_id, наличие: true' в вашей модели LastViewer – MrYoshiji
Да, get_current_user [: id] возвращает правильную строку/имя (я ее протестировал). И мне жаль, что вы подразумеваете под второй частью? Я добавлю модели Report и Person, если это поможет –