我被困在删除/毁灭中。任何帮助将不胜感激!
我在Mac 10.8.3上使用Ruby 2.0.0和Rails 3.2.6与Postgres。
这是应该起作用的删除链接:
<%= link_to 'Destroy', @product, method: :delete, data: { confirm: 'Are you sure?' } %>
但是当我点击Destroy链接时,它会将我引导到用户的个人资料中。我没有得到任何确认窗口,也没有进行任何操作(删除)。它似乎只是停留在同一页面。我正在使用Firefox,但在IE和Chrome中是相同的。
这就是我所拥有的:
安装了宝石“jquery-rails”
applications.js(来自app / assets / javascripts)有以下几行:
//= require jquery
//= require jquery_ujs
//= require_tree .
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" />
(来自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
(来自配置)我有:
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)
答案 0 :(得分:0)
使用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
使用前缀列(产品),将 _path 添加到此单词( product_path ),使用正确的方法(< strong> DELETE ),将ids作为参数传递(在这种情况下,您可以执行 product_path(@product)),然后就完成了。你将拥有:
<%= link_to "Delete", product_path(@product), method: :delete, data: { confirm: "Are you sure?" } %>
答案 1 :(得分:0)
也许(我只是猜测,但有一天我遇到了类似的问题)如果你根据Agile Web Development with Rails这本书设计产品目录或购物车,产品型号可能包含过滤器{{如果产品列在before_destroy :ensure_not_referenced_by_any_line_item
中,则会阻止产品销毁。如果是这种情况,您可以在销毁产品之前清除LineItems
中的LineItem列表。否则抱歉。