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

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已经是对应的用户实例。通常控制器会用回调提前加载,比如:
    # 控制器顶部添加回调
    before_action :set_user, only: [:show, :edit, :update, :destroy]
    
    private
    def set_user
      @user = User.find(params[:id])
    end
    
    或者直接在destroy action里手动查找:
    def destroy
      @user = User.find(params[:id])
      @user.destroy
      # 后续respond_to代码...
    end
    
  • 检查路由与请求参数:
    确认路由配置正确,请求URL中是否携带了有效的用户ID(比如/users/1),params[:id]能正确获取到值。
  • 检查模型自定义方法:
    如果User模型中自定义了destroy方法,会覆盖ActiveRecord的默认方法。检查模型代码,若存在自定义destroy,要么修改它适配无参数调用,要么重命名该方法避免冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:37:37