Rails - 无法弄清楚如何销毁记录

问题描述:

我无法找到销毁记录的正确方法。我觉得这是一个完整的新手。Rails - 无法弄清楚如何销毁记录

这里是(从rake routes输出)有关控制器的路线:

contents GET /admin/contents(.:format)     {:controller=>"contents", :action=>"index"} 
    contents POST /admin/contents(.:format)     {:controller=>"contents", :action=>"create"} 
new_content GET /admin/contents/new(.:format)    {:controller=>"contents", :action=>"new"} 
edit_content GET /admin/contents/:id/edit(.:format)   {:controller=>"contents", :action=>"edit"} 
    content GET /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"show"} 
    content PUT /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"update"} 
    content DELETE /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"destroy"} 

是什么让我的底线是不看的比得到任何的不同,并把。

这里是链接:

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :delete %> 

也试过:

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %> 

,输出是:

<a href="/admin/contents/1400" data-confirm="Are you sure?" data-method="destroy" rel="nofollow">Destroy</a> 

有人能发现什么,我做错了什么? : -/


编辑

我没有intially有rails.js加载。我现在做的。

这里是我的破坏行动的内容:

def destroy 
    @content = Content.find(params[:id]) 
    @content.destroy 

    respond_to do |format| 
    format.html { redirect_to(contents_url) } 
    format.xml { head :ok } 
    end 
end 

我从内容索引中删除,就像这样:

<% @contents.each do |content| %> 
    <tr> 
    <td><%= content.name %></td> 
    <td><%= link_to 'Show', content %></td> 
    <td><%= link_to 'Edit', edit_content_path(content) %></td> 
    <td><%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %></td> 
    </tr> 
<% end %> 
</table> 

该URL看起来相同,因为它是相同的。区别在于request method。您的Rails应用程序知道分开GETPUTDELETE请求 - 即使它们被设置为相同的URL - 并将请求路由到正确的操作。然而,并非所有的浏览器/ Web服务器都支持所有这些方法,所以Rails依靠不引人注意的JavaScript(ujs)来“伪造”一些请求 - 更具体地说,PUTDELETE。因此,您需要包含Rails应用程序捆绑包之一(默认情况下为Prototype;您可以通过this gem获得jQuery version)。您可以通过jQuery ujs的README(以及源代码)了解更多信息。

如果您遇到问题,可能是因为您没有必要的ujs。这也可能是因为你没有在你的html头文件中包含csrf_meta_tag

有几件事情可以去错了,但很难在没有更多关于您拥有什么以及您获得哪些错误/行为的信息的情况下缩小范围。

  1. 你不必rails.js负荷,因此data-method="delete"是不是有发送AJAX后用_method参数设置为“删除”的效果。
  2. 您的destroy控制器操作没有达到您所期望的。
  3. content不是涉及您试图摧毁的模型实例的局部变量(请注意,如果这是您尝试销毁的单数资源,则只使用单数content_path)。您是否正在寻找@content?没有一些背景很难说。

只是为了澄清你,method选项是HTTP方法,而不是控制器方法。 HTTP方法没有destroy; Rails只是使用destroy而不是delete作为一种“优雅地删除”。