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

Rails中使用link_to调用控制器方法并保持当前路径的实现问题及路由报错咨询

没问题!你的需求完全可以实现,我来一步步帮你搞定

先解决眼前的路由错误

你现在遇到的Missing :controller key on routes definition报错,是因为路由配置里只写了get 'click',没告诉Rails这个请求要交给哪个控制器的哪个方法处理。改一下路由就好:

# config/routes.rb
# 明确指定给Products控制器的click动作
get 'click', to: 'products#click'
# 要是想更符合Rails的REST风格,也可以写成这样
get 'products/click', to: 'products#click'

改完后可以跑一下rails routes命令,确认路由已经正确关联上了。

核心:实现「点击后页面路径不变」

普通的link_to点击会触发页面跳转,路径肯定会变。要保持路径不变,得用AJAX异步请求——简单说就是在不刷新页面的情况下偷偷调用后端方法。

改页面里的链接

给link_to加个remote: true选项,Rails就会自动用AJAX发送请求:

<%= link_to "Click", click_path, remote: true %>

注:如果用了上面第二种路由写法(products/click),路由辅助方法名会变成products_click_path,具体看rails routes的输出就行

完善控制器的click方法

因为是AJAX请求,控制器需要返回JS格式的响应(要是不需要前端做任何操作,返回空响应也可以):

# app/controllers/products_controller.rb
def click
  puts "click called!!!"
  # 不需要前端更新的话,直接返回成功状态就行
  head :ok
  # 要是想给用户点反馈,比如弹个提示,可以用下面这段
  # respond_to do |format|
  #   format.js
  # end
end

如果选了返回JS响应,记得在app/views/products/目录下建一个click.js.erb文件,写点前端逻辑:

// app/views/products/click.js.erb
alert('点击成功!后端的click方法已经被调用啦~');

最后验证一下

  1. 重启你的Rails服务器
  2. 打开index页面,点"Click"链接
  3. 看服务器终端,会看到click called!!!的打印,同时页面没跳转,地址栏路径完全没变

完美解决你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:52:46