我的路线设置如下 -
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
我想确保仍然发送错误消息。这可能吗?
答案 0 :(得分:1)
您看到的路线是资源路线的编辑操作,而不是您单独定义的编辑操作。因此它包含路径中的控制器。
如果您希望路径不包含汽车控制器,您可以将其包含在路径定义中:
resources :cars, :path => '/'
根据经验,我建议您不要这样做,因为当您想要扩展应用程序时,事情会变得混乱。
我建议您取消定义的编辑操作,并从资源路径的show动作中编辑您的汽车。此外,您可以通过更新视图文件显示更新操作中的成功消息,而无需重定向。
如果您确实想要重定向,可以修改资源路由,如下所示:
resources :cars, :path => '/' do
member do
get 'thanks'
end
end