Rails的路线产生嵌套资源
问题描述:
我有以下嵌套的资源用于新的行动POST请求:当Rails的路线产生嵌套资源
resources :listings do
resources :offers do
member do
put "accept"
put "reject"
end
end
end
在我的列表/ show.html.haml,我有
= button_to "Make Offer", new_listing_offer_path(@listing)
现在,我按一下按钮,铁轨产生一个POST请求,因此错误:
Started POST "/listings/2/offers/new" for 127.0.0.1
ActionController::RoutingError (No route matches "/listings/2/offers/new"):
如果我刷新(GET请求),那么页面DISPLA ys正确。
我相信这个不正确的路由只发生在我添加两个额外的动作:接受和拒绝,这恰好是POST动作。
这是Rails中的错误,还是我的错?我应该如何防止这个错误?
谢谢。
答
button_to帮助程序会为您创建一个表单,默认情况下,它会向您指定的URL(“/ listings/2/offers/new”)发送POST请求。
您指定的路由不会生成处理POST请求到/ new的路由。您可以通过运行“rake routes”任务来检查您生成的路线和他们将要响应的动词。
如果您只想链接到表单,请将您的“button_to”更改为“link_to”,然后添加CSS以增添美感。
= link_to "Make Offer", new_listing_offer_path(@listing)
(这GET将路由到您OfferController的新动作)
如果您正在寻找真正POST数据,你可能会需要您的使用情况更改为:
= button_to "Make Offer", listing_offers_path(@listing)
(此POST会路由到您的OfferController的创建操作。)
感谢Mike。从你的提示中,我意识到我可以添加:method =>:进入button_to。有用。 – AdamNYC 2011-12-29 17:51:31
没问题。是的,这也可以工作,但除非它是搜索表单或其他东西,否则使用表单提交来执行GET只会让我感到尴尬,所以故意留下该解决方案......但它确实有效! – miked 2011-12-29 18:29:27