Rails中link_to提示控制器无generate_book动作,但该动作已存在的问题
排查AbstractController::ActionNotFound: generate_book动作不存在的问题
以下是几个核心排查方向及解决方案:
1. 检查控制器方法的可见性
Rails控制器中,private/protected关键字之后的方法无法作为路由动作被调用。看你贴出的控制器代码,generate_book方法的缩进可能导致它被放在了私有方法区域。确保方法处于public范围:
class PostsController < ApplicationController # 其他公开动作... def generate_book post = Post.find(params[:id]) book_output = GetBook.call # 调用服务 Book.create(post: post, one: book_output) redirect_to books_path end private # 私有方法写在这里 end
2. 验证路由是否正确生成
在终端运行命令:
rails routes | grep generate_book
确认输出中存在对应POST路由,格式应为:
generate_book_post POST /posts/:id/generate_book(.:format) posts#generate_book
如果没有该路由,重启Rails服务器确保路由配置已加载。
3. 确认Turbo请求方式是否生效
通过浏览器开发者工具的Network标签,查看点击链接时的请求Method是否为POST。如果实际是GET请求,可改用button_to(默认发送POST请求)替代link_to:
<%= button_to "New Book", generate_book_post_path(post.id) %>
4. 检查控制器文件与类名匹配
确保控制器文件路径为app/controllers/posts_controller.rb,且类名为PostsController < ApplicationController——Rails对文件名和类名的命名规则要求严格(复数文件名对应驼峰类名)。
内容的提问来源于stack exchange,提问作者superbot
相关产品推荐
相关产品推荐

