我有以下嵌套资源:
resources :listings do
resources :offers do
member do
put "accept"
put "reject"
end
end
end
在我的listing / show.html.haml中,我有
= button_to "Make Offer", new_listing_offer_path(@listing)
现在,当我点击按钮时,rails会生成一个POST请求,从而出现错误:
Started POST "/listings/2/offers/new" for 127.0.0.1
ActionController::RoutingError (No route matches "/listings/2/offers/new"):
如果我刷新(GET请求),则页面显示正确。
我相信这种错误的路由仅在我添加了两个额外的操作时才会发生:接受和拒绝,这恰好是POST操作。
这是Rails中的错误,还是我的错?我该如何防止此错误?
谢谢。
答案 0 :(得分:2)
button_to帮助器为您创建一个表单,默认情况下会向您指定的URL发送POST请求(“/ listings / 2 / offers / new”)。
您指定的路由不会生成处理/ new的POST请求的路由。您可以通过运行“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的创建操作。)