Проблема не в данных в переменной экземпляра, а в сериализации.
Помощник представления react_component
вызовет метод to_json
для второго аргумента, если он не является строкой. В вашем случае: {calendar_items: @calendar_items}.to_json
, который работает рекурсивно, поэтому вы хотите убедиться, что @calendar_items.to_json
возвращает ожидаемый результат JSON. Вы можете использовать @calendar_items.serializable_hash
для тестирования в rails console
, он возвращает хеш, который более удобочитаем для людей.
Или вы сериализуете свои данные в строку и передаете ее react_component
.
Я не знаю сериализацию Rails 5, но она похожа на ActiveModelSerializers, так что вы можете включить отношения в сериализованном выводе, например: @calendar_items.to_jso(include: [:documents])
. В ActiveModelSerializers вы можете указать сериализатор для каждого класса и указать отношения к ним, которые могут быть включены автоматически.
Таким образом, одним рабочим решением может быть:
def show
calendar_items = CalendarItem.where(schedule: @schedule).includes(:people, :documents)
@react_component_props = { calendar_items: calendar_items.to_json(include: [:people, :documents]) }
end
= react_component('CalendarItemsList', @react_component_props)
Скромный совет: вы можете создать область видимости by_schedule
в модели CalendarItem, чтобы позже вы могли ее использовать: CalendarItem.by_schedule @schedule
ИЗМЕНИТЬ
Если вам нужны данные в других местах представления, вы можете использовать метод as_json
:
def show
calendar_items_scope = CalendarItem.where(schedule: @schedule).includes(:people, :documents)
@calendar_items = calendar_items_scope.as_json(include: [:people, :documents])
end
person
Peter Toth
schedule
05.03.2017
CalendarItem.includes(<criteria>).where(<criteria>)
. У вас обратный порядок. - person Kieran E   schedule 05.03.2017includes
только предварительно загружает ассоциации. Не имеет значения, доступна ли ассоциация для представления. Похоже, вы ищете сериализатор. - person fylooi   schedule 05.03.2017attr_accessor
, поэтому у меня естьattr_accessor :id, :title, :people, :documents
- person Aurimas   schedule 05.03.2017attr_accessor
для фактических столбцов базы данных - это ошибка, которую я видел много, и она имеет тенденцию портить естественные методы доступа Active Record. Всегда используйтеattr_accessor
только для вещей, которые не являются столбцами базы данных. - person Taryn East   schedule 06.03.2017