Rails报错:PostsController不存在rsvp动作,如何修复?
解决PostsController中'rsvp'动作找不到的问题
老哥,这个错误原因很直接:你的请求被路由到了PostsController的rsvp动作,但这个控制器里并没有定义这个方法,所以才会抛出「Unknown action」的错误。
方案一:在PostsController中添加rsvp方法
如果你确实需要通过PostsController来处理RSVP逻辑,可以直接在PostsController里定义rsvp方法,把你原本在RsvpController里的创建逻辑迁移过来:
class PostsController < ApplicationController # 保留你已有的其他方法,比如show、index等 def rsvp # 先找到对应的帖子 @post = Post.find(params[:id]) # 用当前用户创建RSVP关联 rsvp = current_user.rsvps.build(post_id: @post.id) if rsvp.save # 保存成功后的跳转和提示,可根据需求调整 redirect_to @post, notice: 'RSVP成功!' else # 保存失败的处理 redirect_to @post, alert: 'RSVP失败,请重试。' end end end
添加完方法后,还要记得在config/routes.rb里配置对应的路由,让请求能匹配到这个动作:
resources :posts do member do post :rsvp # 因为是创建操作,用POST请求更符合REST规范 end end
方案二:复用已有的RsvpController(更推荐)
其实你已经写了RsvpController的create方法,这更符合Rails的RESTful设计原则。出现错误大概率是因为你的路由或视图链接配置错了,把请求指向了PostsController而非RsvpController。
这种情况下不需要修改PostsController,只需要调整路由和视图:
- 配置嵌套路由:
# config/routes.rb resources :posts do resources :rsvps, only: [:create], shallow: true end
- 在
show.html.erb里修改RSVP按钮的链接,指向rsvps#create:
<p> <strong>Date:</strong> <%= @post.date %> </p> <!-- 添加RSVP按钮 --> <%= button_to '确认RSVP', post_rsvps_path(@post), method: :post %>
这样请求就会正确路由到RsvpController的create方法,不用在PostsController里额外加代码。
内容的提问来源于stack exchange,提问作者user9601213
相关产品推荐
相关产品推荐

