2011-12-25 21 views
0

我有兩個模型在rails 3.1應用程序:lease_booking和lease_log。 Lease_booking has_many lease_logs和lease_log belongs_to lease_booking。在routes.rb中的關聯是:如何在導軌中建立'新'在相關的控制器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 

租賃記錄控制器似乎沒有正確識別租賃預訂的id(應爲1)。

相同的錯誤頁面上的租賃預訂ID(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

你的參數輸出顯示蝨PARAM你應該尋找 - lease_booking_id:

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

從控制檯運行rake routes怎麼看嵌套路由使用參數。

編輯:

當你嵌套你的路由內的資源依賴於外部資源:

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在你的控制器:

爲on Rails的路由的詳細信息,請參閱http://guides.rubyonrails.org/routing.html

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'爲#<#:0x5180718>。由於關聯,rake路由中沒有lease_logs_path。 erb的第一行是:<%= simple_form_for @lease_log do | f | %>。 – user938363 2011-12-25 23:11:19

+0

有關構建控制器和視圖的完整示例,請參閱下面的鏈接。 – user938363 2011-12-26 03:37:05