Как построить «новый» в соответствующем контроллере в рельсах 3.1 - PullRequest
0 голосов
/ 25 декабря 2011

У меня есть две модели в приложении rails 3.1: lease_booking и lease_log.Lease_booking has_many lease_logs и lease_log относится к аренды_booking.В route.rb ассоциация:

resources :lease_bookings do
  resources :lease_logs
end 

В lease_booking show.html.erb путь для создания нового журнала аренды:

<%= link_to "new Log", new_lease_booking_lease_log_path(@lease_booking) %>

«Новый» код вКонтроллер lease_log:

  def new
    @lease_log = LeaseBooking.find(params[:id]).lease_log.new()
  end

Однако после нажатия «Новый журнал» для контроллера lease_log «new» возникает ошибка:

Couldn't find LeaseBooking without an ID

Кажется, что id (должно быть 1)бронирование аренды не было должным образом признано в журнале аренды контроллера.

Идентификатор бронирования аренды (1) на той же странице ошибки является правильным:

Parameters:

{"lease_booking_id"=>"1"}

Есть ли способ исправить это?Спасибо.

ОБНОВЛЕНИЕ: Здесь выводятся маршруты рейка

    lease_booking_lease_logs GET    /lease_bookings/:lease_booking_id/lease_logs(.:format)          {:action=>"index", :controller=>"lease_logs"}
                             POST   /lease_bookings/:lease_booking_id/lease_logs(.:format)          {:action=>"create", :controller=>"lease_logs"}
 new_lease_booking_lease_log GET    /lease_bookings/:lease_booking_id/lease_logs/new(.:format)      {:action=>"new", :controller=>"lease_logs"}
edit_lease_booking_lease_log GET    /lease_bookings/:lease_booking_id/lease_logs/:id/edit(.:format) {:action=>"edit", :controller=>"lease_logs"}
     lease_booking_lease_log GET    /lease_bookings/:lease_booking_id/lease_logs/:id(.:format)      {:action=>"show", :controller=>"lease_logs"}
                             PUT    /lease_bookings/:lease_booking_id/lease_logs/:id(.:format)      {:action=>"update", :controller=>"lease_logs"}
                             DELETE /lease_bookings/:lease_booking_id/lease_logs/:id(.:format)      {:action=>"destroy", :controller=>"lease_logs"}

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

Ваш вывод параметров показывает параметр shat, который вы должны искать - lease_booking_id:

@lease_log = LeaseBooking.find(params[:lease_booking_id]).lease_log.new()

В консоли запустите rake routes, чтобы увидеть, как вложенные маршруты используют параметры.

Edit:

Когда вы вкладываете свои маршруты, внутренние ресурсы зависят от внешнего ресурса:

resources :lease_bookings do
  resources :lease_logs
end

Посмотрите на вывод rake routes для создания вашего lease_log:

POST   /lease_bookings/:lease_booking_id/lease_logs

Поэтому, когда вы настраиваете свою форму, вам нужно указать lease_booking, а также новый lease_log (и любые методы _path или _url должны быть соответствующим образом адаптированы):

<%= simple_form_for [@lease_booking, @lease_log] do |f| %>

Для этого также потребуется установить @lease_booking в вашем контроллере:

См. http://guides.rubyonrails.org/routing.html для получения дополнительной информации о маршрутизации Rails.

def new
  @lease_booking = LeaseBooking.find(params[:lease_booking_id])
  @lease_log = @lease_booking.lease_log.new
end
0 голосов
/ 26 декабря 2011

Вот прекрасный пример, который я нашел для построения контроллера и представления для связи 1-ко-многим:

http://jonathanhui.com/ruby-rails-3-model-1-many-association

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...