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应用程序知道分开GET
,PUT
和DELETE
请求 - 即使它们被设置为相同的URL - 并将请求路由到正确的操作。然而,并非所有的浏览器/ Web服务器都支持所有这些方法,所以Rails依靠不引人注意的JavaScript(ujs)来“伪造”一些请求 - 更具体地说,PUT
和DELETE
。因此,您需要包含Rails应用程序捆绑包之一(默认情况下为Prototype;您可以通过this gem获得jQuery version)。您可以通过jQuery ujs的README(以及源代码)了解更多信息。
如果您遇到问题,可能是因为您没有必要的ujs。这也可能是因为你没有在你的html头文件中包含csrf_meta_tag
。
答
有几件事情可以去错了,但很难在没有更多关于您拥有什么以及您获得哪些错误/行为的信息的情况下缩小范围。
- 你不必rails.js负荷,因此
data-method="delete"
是不是有发送AJAX后用_method
参数设置为“删除”的效果。 - 您的
destroy
控制器操作没有达到您所期望的。 -
content
不是涉及您试图摧毁的模型实例的局部变量(请注意,如果这是您尝试销毁的单数资源,则只使用单数content_path
)。您是否正在寻找@content
?没有一些背景很难说。
只是为了澄清你,method
选项是HTTP方法,而不是控制器方法。 HTTP方法没有destroy
; Rails只是使用destroy
而不是delete
作为一种“优雅地删除”。