【问题标题】:Why the destroy/delete link dees not work?为什么销毁/删除链接不起作用?
【发布时间】:2013-08-02 13:22:46
【问题描述】:

我被困在删除/销毁。任何帮助将不胜感激!

我在 Mac 10.8.3 和 Postgres 上使用 Ruby 2.0.0 和 Rails 3.2.6。

这是应该可以工作的删除链接:

<%= link_to 'Destroy', @product, method: :delete, data: { confirm: 'Are you sure?' } %>

但是当我点击 Destroy 链接时,它会将我定向到用户的个人资料。我没有收到任何确认窗口,也没有执行任何操作(删除)。似乎它只是停留在同一页面上。我使用的是 Firefox,但在 IE 和 Chrome 中是一样的。

这就是我所拥有的:

  1. gem“jquery-rails”已安装

  2. applications.js(来自 app/assets/javascripts)有以下几行:

    //= require jquery
    //= require jquery_ujs
    //= require_tree .
    
  3. application.html.erb(来自 app/views/layouts)有以下几行:

    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
    

    在查看源代码中我看到:

    <script src="/assets/application.js?body=1" type="text/javascript"></script>
    <meta content="authenticity_token" name="csrf-param" />
    <meta content="MVlJi+WJE1cwWoHnBrpRWIa13gqio0iPT3IL6kpQYdE=" name="csrf-token" />
    
  4. 在 products_controllers.rb(来自 app/controllers)我有:

    def destroy
        @product = Product.where(:id => params[:id]).first
        @product.destroy
    
        respond_to do |format|
            format.html { redirect_to products_url }
            format.json { head :no_content}
        end
    end
    
  5. 在 routes.rb 中(来自配置)我有:

    resources :products
    

那个 Destroy 链接有什么问题?

在同一个 RoR 项目上,编辑链接可以正常工作。

那么,为什么链接不起作用?是 Javascript 问题还是我没有看到的其他问题?

这是服务器的日志:(似乎没有执行“删除”操作)

Started GET "/products/9" for 127.0.0.1 at 2013-08-01 20:01:08 -0500
Processing by ProductsController#show as HTML
Parameters: {"id"=>"9"}
Product Load (0.1ms)  SELECT "products".* FROM "products" WHERE "products"."id" = 9 LIMIT 1
Rendered products/show.html.erb within layouts/application (0.5ms)
Completed 200 OK in 27ms (Views: 25.8ms | ActiveRecord: 0.1ms)

【问题讨论】:

  • 在浏览器控制台中搜索JavaScript 错误。
  • 试试link_to 'Destroy', product_path(@product.id), method: :delete,也看看这个:stackoverflow.com/questions/4423314/…
  • 查看服务器日志。
  • 请提供有关服务器日志中错误的一些信息。
  • @MrYoshiji,嘿,我试过这个,但它对我不起作用......:(

标签: ruby-on-rails destroy


【解决方案1】:

也许(我只是猜测,但有一天我遇到了类似的问题)如果您根据《Agile Web Development with Rails》一书设计目录或使用购物车购物,产品模型可能包含过滤器@987654321 @ 防止产品在LineItems 中列出的情况下被破坏。如果是这种情况,您可以在销毁产品之前清除 ProductsController 中的 LineItems 列表。否则对不起。

【讨论】:

    【解决方案2】:

    使用 Rails 处理路径问题的一个有用方法是在控制台中键入“rake routes”,以便列出所有可用于使用资源的路径。

    通过在您的 routes.rb 文件中声明“resources :products”,“rake routes”将为该特定资源提供 Prefix/Verb/URI Pattern/Controller#Action 的列表。你会得到类似的东西:

    Prefix  Verb   URI Pattern
    product GET    /product/:id(.:format) product#show
            PATCH  /product/:id(.:format) product#update
            DELETE /product/:id(.:format) product#destroy
    

    取前缀列的词(product),在这个词(product_path)上加上_path,使用正确的方法(DELETE),将 ids 作为参数传递(在这种情况下,您只需执行 product_path(@product)),就完成了。您将拥有:

    <%= link_to "Delete", product_path(@product), method: :delete, data: { confirm: "Are you sure?" } %>
    

    【讨论】:

    • 嘿,我尝试了 rake 路由,我确实得到了你在上面输入的内容,我将我的代码更改为你在此处输入的内容......它不起作用.....-_-||
    • 我是否必须将 "" 放入一个单独的视图?我现在把它放在 show.html.erb 中...
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2015-10-16
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多