用React设计Ruby on Rails应用程序的正确方法是什么

时间:2019-04-29 12:53:05

标签: ruby-on-rails reactjs react-rails react-on-rails

我正在使用带有React的Ruby on Rails进行一些项目。我正在使用react-rails宝石。我对如何正确设计Rails和React应用程序的体系结构有一些疑问。我的问题主要是关于在Rails和React之间传递数据。

我知道主要有两种方法。第一种也是最常见的方法是Rails中的API和React中的前端应用程序。这带来了一些利弊。我必须开发和维护两个单独的应用程序,但是将来,我可以轻松地将现有的API重用于移动应用程序之类的其他事物。这样,我的前端React就会向Rails API询问数据。

我选择的第二种方法是使用内置的Rails webpackerreact-railsreact-on-rails开发Monolith应用程序。这样,我只需在Rails控制器中获取数据

@foo = Model.find(id)

并将其传递给视图中的我的React组件

=react_component("Foo", {foo: @foo})

但是当我有了一些具有更多依赖关系的更复杂的模型时,问题就开始了。例如,假设我有一个模型:

class Foo < ApplicationRecord
  belongs_to: :user
  has_many: :bar #which is some nested resources

现在,我想创建一个模型为Foo的索引页,它将显示所有Foo'suser数据并将其连接到Bar's。在纯Rails应用程序中,我可以简单地在控制器中要求@foo,以后再使用@foo.user.nick就可以了。但是,当我使用react时,我需要在控制器中获取所有这些信息,然后使用props传递给React组件,这在我看来会造成很多混乱。

这是我的问题:在Rails和React之间传递数据的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

最干净的选项就是您所说的在控制器中获取并使用道具传递的方式。

如果您作为道具来做,最好的方法是利用Rails的as_json方法及其可链接的选项:

  • 除了
  • 方法
  • 包括

还有一个例子:

@my_component_data = @foo.as_json(include: { user: { only: [:id, :name, :nick] } }

最终,您可能会选择ActiveModelSerializers之类的东西,但我个人更希望避免速度下降和增加复杂性,其他人对此表示怀疑。