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 是/过去的工作要多得多。这让我觉得必须有一种更简单、更流畅、更少代码的方式来处理这个问题。