随着学习的深入,Rails 3带给我的惊喜越来越多。respond_with实在是个好东西,最初是在一篇大牛的博客中看到这个东西。不过奇怪的是在api.rubyonrails.org中找不到它的说明。刚刚又看了一片关于respond_with的博客《respond_with in Rails 3》 ,写的很详细。
以前用respond_with,感觉总是模模糊糊的,一直以为:location是一个类似前缀的东西。
当看到“当数据保存成功后,它自动跳转到@story对应的显示页面,当保存失败后,会自动render的@story的new页面。”突然好像明白了,:location的值会不会就是成功要显示的页面?马上去实验了一下,果然!我在location的地方传了一个'http://google.com'进去,保存成功就看到Google了。
怎么感觉自己越活越笨了呢,要费这么大事才能明白这么简单的东西。
++++++++++++++++++++++++++++++
2011-03-16新增
++++++++++++++++++++++++++++++
在实际的使用当中,常常会到namespace,如果按照前面说的方法,加一个:location,例如:
respond_with @order, :location => store_order_url(@order)
希望订单创建成功后显示订单,当你像上面这样写的时候,会得到一个错误:
Routing Error No route matches {:action=>"show", :id=>#<Order id: nil, ……>, :controller => "store/orders"}
查了好多资料,发现原来对于namespace有一种更方便的写法:
respond_with :store, @order
如果,还想重定向到列表页,就这样写:
respond_with :store, @order, :location => store_orders_url
恩,终于搞定了