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
相关产品推荐
相关产品推荐

