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" %>
漂亮的工作!謝謝!爲什麼我必須指定':method =>:post'? – 2013-03-12 18:54:47
'沒有路由匹配[GET]「/ users/2/book_person」'這明確表示您的'link_to'正在發出'GET'請求。所以你需要說出'POST'請求。因爲您將成員添加爲'post'方法。 – codeit 2013-03-12 19:05:54
看看你的代碼在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