如何在 Rails 中构建视图对象以供 JavaScript 使用

How to build a view object in Rails for JavaScript use

我想要实现的是使用装饰器(可能 Draper) to build an object before passing it to my React code (using the React Rails gem)。我可以轻松地装饰一个对象并在视图中使用这些方法,但是如果我通过 React props 传递一个数组,那是不可能的:

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

我将无法在我的 JavaScript 代码中访问修饰的 project.options.total 方法。

还有其他构建这些对象的方法吗?我过去使用 Active Model Serializers,但这不是单页应用程序,它只是 Rails 视图中的 React 组件。

一种解决方案是创建一种方法,在 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