2011-12-25 2 views
0

У меня есть две модели в рельсах 3.1 app: lease_booking и lease_log. Lease_booking has_many lease_logs и lease_log принадлежит _ к lease_booking. В routes.rb ассоциация:Как конструировать «новый» в assciated контроллер в рельсах 3.1

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 контроллера 'новый' после нажатия 'новый журнал':

Couldn't find LeaseBooking without an ID 

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

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

Parameters: 

{"lease_booking_id"=>"1"} 

Есть ли способ это исправить? Благодарю.

UPDATE: Вот выход рек маршрутов

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

Ваши выходной параметр показывает Шьют параметры вы должны искать - 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_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

появляется новая ошибка из _form_new.html.erb: неопределенный метод 'lease_logs_path 'для # <# <Класс: 0x5185020>: 0x5180718>. В rake-маршрутах отсутствует путь lease_logs_path из-за ассоциации. Первая строка erb: <% = simple_form_for @lease_log do | f | %>. – user938363

+0

см. Приведенную ниже ссылку для полного примера построения контроллера и представления. – user938363

Смежные вопросы