原标题:
Admin::PostsController 中的方法是否能覆盖掉 PostsController 中的方法?
现在在写的一个 app,它的 PostsController 中对于 update 是这么写的:
def update
@post = current_user.posts.find(params[:id])
if @post.update(post_params)
redirect_to post_path(@post)
flash[:notice] = "保存成功!"
else
render :edit
end
end
新建立了一个 Admin::PostsController,其中的 update 是这样的:
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to admin_post_path(@post)
flash[:notice] = "保存成功!"
else
render :edit
end
end
差别在于,对于普通用户,我要求他只能修改自己的 posts,而对于 admin,可以修改所有的 posts。
现在以 admin 身份登录后,在 /admin/posts/87/edit 中尝试修改内容,点击“Submit”以后,却出错了:
ActiveRecord::RecordNotFound at /posts/87
Couldn't find Post with id=87 [WHERE "posts"."user_id" = ?]
同时 better_errors 给出的出错提示在 PostsController 的 update 那里。
意思是这个 update 跳到了 PostsController 的 update 那里而不是 Admin::PostsController 的 update 那里?
我的 routes.rb 中的内容:
resources :posts
namespace :admin do
resources :posts
end
两处对应的 views 里分开用了不同的 edit.html.erb,提交的位置用的都是
<%= f.submit "Submit", :disable_with => 'Submiting...' %>
这一点对点击 Submit 后跳到哪里应该是没关系的吧?
标题里这样提问不知是否合适。我在 Admin::PostsController 中还写了 index,show,destroy 都能正常使用,看起来是“覆盖”了 PostsController 中对应的方法。
求解惑,如何能让我在 Admin::PostsController 中的 update 正常工作?