1

我有以下嵌套资源:

  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)

现在,当我单击按钮时,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 中的错误,还是我的错?我应该如何防止这个错误?

谢谢你。

4

1 回答 1

2

button_to 助手会为您创建一个表单,默认情况下会向您指定的 URL(“/listings/2/offers/new”)发送 POST 请求。

您指定的路由不会生成路由来处理对 /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 的创建操作。)

于 2011-12-29T16:29:37.567 回答