Rails 3:使用respond_with删除资源的正确方法

Mel*_*emi 11 ruby-on-rails actioncontroller respond-with ruby-on-rails-3

我试图通过合并来干扰控制器respond_with.当我这样做时,遵循Railscast中的一些指示,我得到的东西大部分都在工作.问题在于删除资源后的重定向...应该重定向到people_url...而是尝试加载特定资源.

我找到的示例代码看起来像这样......但是它尝试加载刚删除的资源失败了:

# app/controllers/people_controller.rb
class PeopleController < ApplicationController
  respond_to :html, :xml

  def destroy
    @person = Person.find(params[:id])
    flash[:notice] = 'Successfully deleted person.' if @person.destroy
    respond_with(@person)  # <== spec fails here
  end
end
Run Code Online (Sandbox Code Playgroud)

改变最后一行respond_with(@people)也不起作用(虽然我曾希望它会...)

经过深入挖掘并尽力了解事情,我确实让事情发生了(至少看起来如此.规格传递.app功能)用这个:

respond_with(@person, :location => people_url)  # <== now it works
Run Code Online (Sandbox Code Playgroud)

那么,这是处理这个问题的正确方法吗?似乎有了所有'魔法'背后的response_with它会知道删除后它不能重定向到自己?我也认为这个(7种基本的RESTful CRUD方法之一)将是非常基本和基本的,所以很多例子会比比皆是......但我找不到很多,除了那些暗示代码不起作用的代码我.

希望有人可以帮助我理解这里发生的铁轨'魔力'所以当我在路上爆炸时,我不会感到惊讶.

Chi*_*tan 5

您正在尝试使用已删除的资源进行响应.这就是问题所在.在删除等情况下,仅限标题的响应有效.将请求标头状态设置:ok为足够.

head :ok
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但遗憾的是,我仍然感到困惑.你在暗示`respond_with(head:ok)` 因为那不行.我在`respond_to`块里面只熟悉`format.xml {head:ok}`.所以不确定如何在这种情况下使用`respond_with`来工作?!? (2认同)