2012-12-21 46 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 %>