【问题标题】:Ruby on Rails - Destroy Action returns 404Ruby on Rails - 销毁操作返回 404
【发布时间】:2012-09-26 05:26:29
【问题描述】:

我在 route.rb 中有一些这样的路由设置

resources :users do
      resources :lists do
        resources :tasks
      end
  end

当我运行“rake routes”时,我可以看到我的销毁操作的路线:

删除 /users/:user_id/lists/:id(.:format)

我对这个动作的实现如下所示:

  def destroy
    @user = User.find(params[:user_id])
    @user.lists.find(params[:id]).destroy
     render json: { status: "success" }
  end

如果我注释除“渲染”行之外的所有该操作行,我将返回 JSON 结果。然而,我收到了 404 行。我对 Rails 很陌生。有人可以告诉我我有什么问题吗?

谢谢

【问题讨论】:

  • 在第一行之后放一个断点,看看它是否返回一个用户。然后从那里走。查看错误是从哪里开始抛出的。
  • 断点?您使用什么 IDE 可以在 ruby​​ 中插入断点?我只是使用 Sublime Text 编辑这些文件
  • 只要把'debugger'放在前面就行了:guides.rubyonrails.org/debugging_rails_applications.html
  • 您使用的是设计还是自定义用户表?
  • 很高兴知道!问题行似乎是这一行:@user.lists.find(params[:id]).destroy

标签: ruby-on-rails ruby


【解决方案1】:

试试这个

List.delete_all(["ID = ? AND user_id = ?", params[:id], params[:user_id]])

destroy_all

【讨论】:

    【解决方案2】:

    尝试使用它可能对你有帮助

    <%= link_to 'Destroy', [user,list], method: :delete, data: { confirm: 'Are you sure?' } %>
    

    在你的控制器中

    def destroy
      @user = User.find(params[:user_id])
      @list = @user.lists.find(params[:id]) if @user.present?
      if @list.present? && @user.present?
         @list.destroy
         status = "success"
      else
         status = "fail"
      end
      render json: {status: status}
    end
    

    【讨论】:

      【解决方案3】:

      你能发布你的观点吗?我怀疑您需要在链接中指定一个方法,例如:&lt;%= link_to "Delete", [@user, list], method: :delete, remote: true %&gt;

      【讨论】:

      • 其实我做不到。这是我正在为移动客户端开发的 API。它没有用户界面。但是,我正在发出 DELETE http 请求。
      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2022-06-13
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多