嵌套form_for奇异资源

我有一个像这样的单一嵌套资源:

map.resources :bookings, :member => { :rate => :post } do |booking| booking.resource :review end 

给我这些路线:

  new_booking_review GET /bookings/:booking_id/review/new(.:format) {:controller=>"reviews", :action=>"new"} edit_booking_review GET /bookings/:booking_id/review/edit(.:format) {:controller=>"reviews", :action=>"edit"} booking_review GET /bookings/:booking_id/review(.:format) {:controller=>"reviews", :action=>"show"} PUT /bookings/:booking_id/review(.:format) {:controller=>"reviews", :action=>"update"} DELETE /bookings/:booking_id/review(.:format) {:controller=>"reviews", :action=>"destroy"} POST /bookings/:booking_id/review(.:format) {:controller=>"reviews", :action=>"create"} 

我试过这个:

  

哪个返回了这个错误:

 undefined method `booking_reviews_path' for # 

用我的评论控制器

  def new @review = Review.new @booking = Booking.find(params[:booking_id]) end 

但这有效…如果我明确列出了URL …

  booking_review_path(@booking) do |f| %> 

这不是什么大问题……但我想知道我做错了什么。

谢谢

我认为form_for假设所有嵌套资源都是多个资源。 修复form_for将是正确的事情(我敦促你提交一个bug ),但同时,你可以伪造它:

 # in app/helpers/application_helper.rb module ApplicationHelper def booking_reviews_path(*args) booking_review_path(*args) end end 

您不能使用alias_method因为该模块中不存在方法booking_review_path ,但这基本上是相同的。