2

Я пытаюсь использовать декоратор (возможно, Draper), чтобы построить объект, прежде чем передавать его в мой код React (с использованием драгоценного камня React Rails). Я могу легко украсить объект и использовать методы в представлении, но это не представляется возможным, если я передать массив через Реагировать реквизит:Как построить объект вида в Rails для использования JavaScript

<%= react_component('Project', { name: project.name, choices: project.options %>

Я не буду иметь доступа декорированных project.options.total метод в моем Код JavaScript.

Есть ли другой способ создания этих объектов? Раньше я использовал Active Model Serializers, но это не одностраничное приложение, это всего лишь компонент React внутри представления Rails.

ответ

0

Решение состоит в том, чтобы создать метод, который добавляет обязательные поля к строке JSON, прежде чем он будет передан компоненту React.

Думаю, мне удалось найти более чистое решение, используя Active Model Serializers. Вы создаете сериалайзер и построить JSON в методе контроллера:

@project_json = ActiveModelSerializers::SerializableResource.new(@projects).as_json 

В качестве примечания, добавив к этому current_user сериализатору можно легко сделать с помощью рамки:

ActiveModelSerializers::SerializableResource.new(@projects, scope: current_user, scope_name: :current_user).as_json 
Смежные вопросы