Ruby on Rails参数数量错误:destroy方法传参问题求助
Rails Destroy Action 参数错误修复及排查方向
错误原因
ActiveRecord 模型的destroy实例方法不需要传入参数,你当前代码给@user.destroy传了params[:id],导致触发wrong number of arguments (given 1, expected 0)错误。
代码修改建议
直接移除destroy方法的参数即可,正确代码如下:
def destroy @user.destroy respond_to do |format| format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } format.json { head :no_content } end end
移除参数后的问题排查方向
如果移除参数后出现新问题,按以下方向排查:
- 检查
@user是否正确赋值:
确保在执行destroy前,@user已经是对应的用户实例。通常控制器会用回调提前加载,比如:
或者直接在destroy action里手动查找:# 控制器顶部添加回调 before_action :set_user, only: [:show, :edit, :update, :destroy] private def set_user @user = User.find(params[:id]) enddef destroy @user = User.find(params[:id]) @user.destroy # 后续respond_to代码... end - 检查路由与请求参数:
确认路由配置正确,请求URL中是否携带了有效的用户ID(比如/users/1),params[:id]能正确获取到值。 - 检查模型自定义方法:
如果User模型中自定义了destroy方法,会覆盖ActiveRecord的默认方法。检查模型代码,若存在自定义destroy,要么修改它适配无参数调用,要么重命名该方法避免冲突。
内容的提问来源于stack exchange,提问作者HP1957
相关产品推荐
相关产品推荐

