You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails表单提交后如何展示输入值的两倍结果?

问题分析与解决方案

你的代码存在三个核心问题,修正后即可实现输入值翻倍显示的需求:

1. 路由指向错误

当前post '/calculate'的路由被配置为指向genalg#index方法,导致表单提交后根本不会执行calculate方法,自然无法触发翻倍计算逻辑。

修正routes.rb:

Rails.application.routes.draw do
  get 'genalg/index'
  # 将路由指向calculate方法,命名为calculate避免与index路由冲突
  post '/calculate', to: 'genalg#calculate', as: 'calculate'
end

2. form_with默认AJAX提交导致页面不刷新

Rails 6及以上版本中,form_with默认开启remote: true,会以AJAX方式提交表单。而你的calculate方法直接render :index返回HTML,AJAX请求不会自动替换页面内容,导致结果无法显示。

修正视图中的form_with:
添加local: true强制使用普通HTTP POST提交,触发页面刷新:

<h1>Genalg#index</h1>
<p>Find me in app/views/genalg/index.html.erb</p>
<%= form_with url: "/calculate", local: true do |form| %>
  <%= form.text_field :query %>
  <%= form.submit "calculate" %>
<% end %>
<% unless @query.nil? %>
  <p><%=@query%></p>
<% end %>

3. 可选优化:参数获取的健壮性

当前params[:query]可以直接获取值,但为避免后续扩展时的参数冲突,建议给表单添加命名空间:

视图修改(可选):

<%= form_with url: "/calculate", local: true, scope: :genalg do |form| %>
  <%= form.text_field :query %>
  <%= form.submit "calculate" %>
<% end %>

对应控制器calculate方法修改:

def calculate
  puts params
  # 从命名空间中读取参数
  @query = (params[:genalg][:query].to_i * 2).to_s
  render :index
end

验证流程

输入数字到文本框并提交后,页面会刷新,底部将显示输入值的两倍结果(例如输入5,显示10)。

内容的提问来源于stack exchange,提问作者PinkElephantsOnParade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:01:17