2012-12-21 80 views
0

我真的不知道爲什麼會發生。嵌套路由後,路徑被搞亂了

這是我的路線

resources :users do 
    resources :bookmarks 
end 

控制器

# bookmarks_controller 
def edit 
    # this returns perfectly data in the edit view 
    @bookmark = current_user.bookmarks.find(params[:id]) 
end 

這是視圖

<%= form_for @bookmark do |b| %> 
<% end %> 

因爲一切都搞砸了,當我嵌套在用戶的書籤資源它導致錯誤

未定義的方法`bookmark_path」

然後我的形式改變爲

<%= form_for user_bookmark_path(current_user, @bookmark) do |b| %> 

的誤差消失,但有在文本字段中的形式沒有這樣的數據,並且表單動作是/用戶/ [USER_ID] /書籤/ [bookmark_id] /編輯

耙路由信息

user_bookmarks  GET /users/:user_id/bookmarks(.:format)   bookmarks#index 
        POST /users/:user_id/bookmarks(.:format)   bookmarks#create 
new_user_bookmark GET /users/:user_id/bookmarks/new(.:format)  bookmarks#new 
edit_user_bookmark GET /users/:user_id/bookmarks/:id/edit(.:format) bookmarks#edit 
user_bookmark  GET /users/:user_id/bookmarks/:id(.:format)  bookmarks#show 
        PUT /users/:user_id/bookmarks/:id(.:format)  bookmarks#update 
        DELETE /users/:user_id/bookmarks/:id(.:format)  bookmarks#destroy 

任何想法如何解決它?由於

+0

只是說:'current_user.bookmarks.find(PARAMS [:編號])'會產生2個查詢到DB。你知道書籤ID,爲什麼不直接找到它(並測試所有權之後),像這樣:'Bookmark.where(id:params [:id],user_id:current_user.id)'?這隻對DB執行1個查詢;) – MrYoshiji

回答

4

試着這麼做:

<%= form_for [current_user, @bookmark] do |b| %> 
<% end %>