我无法找到销毁记录的正确方法。我觉得这样一个完整的新手。
以下是与控制器有关的路由(来自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>
有人能发现我在做错了吗? : - /
修改
我最初没有加载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>
答案 0 :(得分:4)
URL看起来是一样的,因为它是相同的。区别在于request method。您的Rails应用知道将GET
,PUT
和DELETE
请求分开 - 即使它们是针对相同的网址 - 并将请求路由到正确的操作。
然而,并非所有浏览器/网络服务器都支持所有这些方法,因此Rails依靠不引人注目的JavaScript(ujs)来“伪造”某些请求 - 更具体地说,PUT
和DELETE
。因此,您需要为Rails应用程序包含一个捆绑包(Prototype默认出现;您可以获得jQuery version到this gem)。您可以通过jQuery ujs的README(当然还有源代码)了解更多信息。
如果您遇到问题,可能是因为您没有必要的ujs。也可能是您未在html标题中包含csrf_meta_tag
。
答案 1 :(得分:2)
有些事情可能会出错,但如果没有更多关于你所拥有的信息以及你所得到的错误/行为,就很难缩小范围。
data-method="delete"
无法发送一个_method
参数设置为“delete”的AJAX帖子。 destroy
控制器操作没有按照您的预期进行操作。content
不是指向您要销毁的模型实例的局部变量(请注意,如果这是您试图销毁的单一资源,则只会使用单数content_path
)。您是否正在寻找@content
?没有一些背景,很难说。只是为了澄清一下,method
选项是HTTP方法,而不是控制器方法。没有destroy
HTTP方法; Rails只使用destroy
而非delete
作为“优雅删除”。