我是Rails的新手,如果这是一个简单的问题,我很抱歉:(使用Rails 7)
我有一个简单的_form如下:
<%= simple_form_for investment, url: investment_path(investment), method: :patch do |f| %>
<tr>
<td style="width: 5%;"><%= f.input :user_id,
collection: User.all.map { |u| [u.initials, u.id] },
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px;' } %></td>
<td style="width: 15%;"><%= f.input :institution_id,
collection: Institution.all.to_a,
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px;' } %></td>
<td style="width: 15%;"><%= f.input :investment_type_id,
collection: InvestmentType.all.to_a,
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px;' } %></td>
<td style="width: 15%;"><%= f.input :fin_benchmark_id,
collection: FinBenchmark.all.to_a,
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px;' } %></td>
<td style="width: 30%;"><%= f.input :name,
as: :text,
label: false,
input_html: { class: 'form-control', style: 'outline: none, font-size: 12px', rows: '1' } %></td>
<td style="width: 15%;"><%= f.input :investment_number,
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px' } %></td>
<td style="width: 15%;"><%= f.input :risk,
label: false,
input_html: { class: 'form-control', style: 'font-size: 12px' } %></td>
<td><%= f.input :track_return, label: false %></td>
<td><%= link_to 'Show', investment %></td>
<td><%= f.submit 'Update', class: 'btn btn-primary' %></td>
</tr>
<% end %>
当我单击Update按钮时,表单中所做的更改将被提交,DB也将被更改。这也将我重定向到一个“Show”页面(就像在许多Rails示例中一样)。“显示”页面有一个链接,指向加载此表单的索引。
当返回表单时,所有按钮都不再工作,它们都被禁用。我已经谷歌了这个,发现我应该添加数据:{ disable_with:false }。我做到了,但仍然,按钮仍然被禁用。让按钮重新工作的唯一方法是刷新页面。
当我们回到这个页面时,如何使按钮工作?
1条答案
按热度按时间v6ylcynt1#
Rails正在努力不重新加载您的页面。它使用它的最新玩具Turbo,劫持所有链接和提交从正常的HTML操作,而是使用缓存和远程表单提交和浏览器历史记录和一堆其他技巧,以避免昂贵的页面重新加载。
因此,您返回的表单页面仍然处于您离开时的“状态”。这意味着,表单已经提交,按钮已经被禁用,所以你不能意外地提交两次。
你可以做一些事情来告诉Rails你实际上需要刷新:
1.关闭以下表单的Turbo:
这应该会强制show页面为完全重定向和页面加载。并且 * 应该 * 修复返回到索引视图的问题。
1.关闭从show到index的链接上的Turbo,这也应该强制加载整个页面:
1.在索引页面上使用自定义呈现来强制只重新加载表单。
1.在表单上使用turbo frame,当从show视图返回到index视图时,使用turbo stream管道输入新表单以替换已提交的表单。
我确信DHH希望您执行#4,关闭Turbo确实会有惩罚:你实际上是在重新加载你的页面,这很慢而且代价很高。