2013-03-12 35 views
0

我一直在試圖實現一直讓我頭疼的功能(rails newb)。將數據從路由傳遞到構建多個對象的控制器

我有一個由用戶組成的應用程序,並能夠安排與特殊用戶的預訂。我在特殊用戶個人資料頁面上放置了一個「計劃預訂」鏈接,該鏈接應該創建(1)「預訂」對象和(2)創建預訂對象(booking.user =特殊用戶)的孩子。第二部分是隻有稍後只有booking.users才能訪問預訂對象。

以下是我的失敗嘗試。

No route matches [GET] "https://stackoverflow.com/users/2/book_person" 

耙路線:

book_person_user POST /users/:id/book_person(.:format) 

路線:

resources :users do 
member do 
    post :book_person, :controller => "bookings", :action => "book_person" 
end 
end 

Booking_controller

def book_person 
@booking = Booking.new 
@booking.name = "Booking with #{params[:id]}" 
if @booking.save 
    @user = User.find(params[:id]) 
    if not @user.participant_of?(@booking) 
     @booking.users << @user 
     flash[:notice] = 'User was successfully added to booking' 
    else 
     flash[:error] = 'User was already part of booking' 
    end 
    redirect_to @booking 
else 
    flash[:notice] = "Could not add booking" 
    redirect_to @booking 
end 

用戶個人資料頁面上鍊接到預訂用戶:

<%= link_to "Book Sessions", book_person_user_path, class: "btn btn-large" %> 

回答

1

試試這個:

<%= link_to "Book Sessions", book_person_user_path, :method => :post, class: "btn btn-large" %> 
+0

漂亮的工作!謝謝!爲什麼我必須指定':method =>:post'? – 2013-03-12 18:54:47

+0

'沒有路由匹配[GET]「/ users/2/book_person」'這明確表示您的'link_to'正在發出'GET'請求。所以你需要說出'POST'請求。因爲您將成員添加爲'post'方法。 – codeit 2013-03-12 19:05:54

+0

看看你的代碼在routes.rb =>'post:book_person,:controller =>「bookings」,:action =>「book_person」。 你直接說你要使用HTTP POST方法。如果您沒有執行任何保存操作,即保存一個對象,則使用HTTP GET方法(只需將您的routes.rb中的'post'更改爲'get'),但當我看到您正在進行一些保存時,繼續使用POST方法。 – Zippie 2013-03-12 19:07:39

相關問題