无法更新时重定向到自定义路径

时间:2012-01-12 10:54:08

标签: ruby-on-rails ruby-on-rails-3 validation

我的路线设置如下 -

  match "/:id" =>"car#edit", :as => :edit_car
  match "/:id/thanks" =>"cars#thanks", :as => :thanks

www.myurl.com/12345将进入汽车的编辑行动。

我的更新操作如下所示

def update
  @car = Car.find(params[:id])
  respond_to do |format|
    if @car.update_attributes(params[:car])
      format.html { redirect_to(thanks_path(@car)) }
    else
      format.html { render action: "edit" }
    end
  end
end  

在成功更新后,它会重定向到www.myurl.com/12345/thanks - 这很好 - 按预期工作。

但是,如果在更新时出现错误,则将编辑操作呈现为 -

  www.myurl.com/cars/12345

我希望将编辑操作重新呈现为 -

  www.myurl.com/12345

我想确保仍然发送错误消息。这可能吗?

1 个答案:

答案 0 :(得分:1)

您看到的路线是资源路线的编辑操作,而不是您单独定义的编辑操作。因此它包含路径中的控制器。

如果您希望路径不包含汽车控制器,您可以将其包含在路径定义中:

resources :cars, :path => '/'

根据经验,我建议您不要这样做,因为当您想要扩展应用程序时,事情会变得混乱。

我建议您取消定义的编辑操作,并从资源路径的show动作中编辑您的汽车。此外,您可以通过更新视图文件显示更新操作中的成功消息,而无需重定向。

如果您确实想要重定向,可以修改资源路由,如下所示:

resources :cars, :path => '/' do
   member do 
     get 'thanks'
   end
end