1

Rails 的未来似乎正在从 UJS 转向 Turbo 和 Stimulus。但是,与老式的 UJS 相比,某些功能似乎需要更多的代码和更多的工作。

例如:要插入允许创建新记录的内联表单,您可以创建如下链接:

link_to 'add record', new_user_path, remote: true

然后,在控制器中:

def new
  @user = User.new
  respond_to do |format|
     format.js
  end
end

最后是一个 new.js.erb 视图,其中包含为响应新操作而要执行的内容(表单)。

有人会认为只需响应以下内容即可轻松转换为 Turbo:

def new
  @user = User.new
  respond_to do |format|
     format.turbo_stream
  end
end

然后将 new.js.erb 更改为 new.turbo_stream.erb,内容如下:

<turbo-stream action='append' target="<%= dom_id @user %>_new_form">
  <template>
      ...the user form stuff...
  </template>
</turbo-stream>

但是,Turbo Streams 不处理 GET 请求。所以,这种方法是行不通的。

我的问题是:Rails 7 的处理方式是什么?我不认为 UJS 是答案,因为 Turbo 和 Stimulus 正在“取代”UJS 功能。也许,答案是使用 Stimulus 插入新表单,然后当表单在创建操作中成功时,使用流在 POST 请求之后插入后续新记录。但是,这似乎比 UJS 是/过去的工作要多得多。这让我觉得必须有一种更简单、更流畅、更少代码的方式来处理这个问题。

4

1 回答 1

0

为此,我会使用turbo-frames

  • 先做一个空的turbo-framenew_record

  • 然后你可以有一个链接并设置data-turbo-frame="new_record"

    这就像您单击了new_record turbo-frame

  • 然后在新模板上有一个匹配的turbo-frame包装你的表格,然后

  • 当您单击新记录按钮时,它会将新记录表格放在现场我会说这是热线方式。

于 2021-10-04T22:48:26.350 回答