вложенный form_for единственного ресурса - PullRequest
3 голосов
/ 14 февраля 2010

У меня есть отдельный вложенный ресурс, например, так:

  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"}

Я пробовал это:

<% form_for [@booking, @review] do |f| %>

Который вернул эту ошибку:

undefined method `booking_reviews_path' for #<ActionView::Base:0x10572b888>

С моим контроллером отзывов

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

Но это работает ... если я перечислю URL явно ...

<% form_for :review, :url => booking_review_path(@booking) do |f| %>

Это не имеет большого значения ... но мне интересно, что я делаю неправильно.

Спасибо

1 Ответ

8 голосов
/ 14 февраля 2010

Я думаю, form_for предполагает, что все вложенные ресурсы множественные ресурсы. Исправление form_for будет правильным решением (и я призываю вас отправить ошибку ), но в то же время вы можете подделать ее:

# in app/helpers/application_helper.rb
module ApplicationHelper

  def booking_reviews_path(*args)
    booking_review_path(*args)
  end

end

Вы не можете использовать alias_method, потому что метод booking_review_path не существует в этом модуле, но по сути это одно и то же.

...