Я пытаюсь найти оптимальный способ моделирования моей базы данных.
фона:Модельные ассоциации в Rails has_one с class_name
я в настоящее время есть две рельсы модели, одна называется
Environment
, а другой называетсяStatusUpdate
.У меня есть программа, которая находится на разных серверах и отправляет
StatusUpdates
дляEnvironments
. Эти обновления содержат четыре части информации об окружающей среде.У меня есть индексный экран, который показывает мне все
Environments
. (Модели, приведенные ниже)- Моя цель - показать пользователю всю информацию из последнего обновления статуса об окружающей среде.
Я хранить десять самые последние
StatusUpdates
и что-нибудь> 10 удаляется при получении нового.
Принципиальное расположение индекса
- среды1 --Status_Field_1 - Status_Field_2 - Status_Field_3 - Status_Field_4--
- Environment2 --Status_Field_1 - Status_Field_2 - Status_Field_3 - Status_Field_4--
- Environment3 --Status_Field_1 - Status_Field_2 - Status_Field_3 - Status_Field_4--
- Environment4 --Status_Field_1 - Status_Field_2 - Status_Field_3 - Status_Field_4--
Текущая схема
Environment(name):has_many StatusUpdates
StatusUpdate(field1, field2, field3, field4): belongs_to Environment
Среды Контроллер
def index
@environments = Environment.paginate(page: params[:page])
end
Я затем вынести @environments
используя частичное.
Вопрос
Текущая схема представляется целесообразным, но я подозреваю, что я должен был бы сделать дополнительный вызов к базе данных в EnvironmentsController во время индексной функции. Я могу изменить схему Environment
, чтобы включить поля 1 - 4? Или есть способ выполнить Environment.paginate
при получении последнего StatusUpdate из базы данных для каждой среды?
Рекомендация H-man звучит превосходно, но я не могу понять, почему я получаю неожиданную ошибку tLabel в моей модели с ассоциацией has_one, которую он рекомендовал. Для справки:
class Environment < ActiveRecord::Base
has_many: status_updates
has_one: current_status, -> { order: 'created_at DESC' }, class_name: 'StatusUpdate'
end
Rails 4.0.2
Для первого блока кода я заметил, что у вас была 'def Environment ...' вместо 'class Environment ...', есть цель для этого или просто опечатка? Я подозреваю, что последнее, но я столкнулся с ошибкой и хотел убедиться, что =] В настоящее время появляется ошибка «неожиданный tLABEL», а код ссылается на ассоциацию has_one в модели. 'has_one: current_status, -> {order: 'created_at DESC'}, class_name: 'StatusUpdate'' Также Rails 4.0.2 – user1870954
К сожалению, это была опечатка. Это должна быть «классная среда». Исправлена. – Hesham
Не беспокойтесь! Хотя я положил это в своей модели несколько часов назад и тщательно проглотил весь мой код. Дословно, что вы написали, и я проверил с Rails API. Я все еще получаю непредвиденную ошибку tLabel в строке ассоциации has_one. Есть предположения? Нужна ли мне какая-то миграция? – user1870954