如何限制用户只编辑他们的记录

dan*_*iel 2 ruby-on-rails devise ruby-on-rails-3

嘿,我希望你能帮助我.

我正在使用rails 3和设计宝石.
我试图找到一种方法让用户只编辑他们创建的帖子/评论.
我应该为此添加CanCan宝石还是我可以用设计来做?或者只是一个简单的Active Record查询可能吗?

非常感谢.

von*_*rad 10

假设你UserPost/ 之间有关系Comment,你可以使用这种关系只获取你edit动作中属于用户的记录:

class PostsController < ApplicationController
  def edit
    # Instead of this:
    # Post.find(params[:id])
    # Use this:
    current_user.posts.find(params[:id])
  end
end
Run Code Online (Sandbox Code Playgroud)

这只会在当前用户创建它时找到帖子.

当然,您还必须修改update操作.


Bjo*_*orn 6

Devise创建一个哈希current_user,您可以在控制器,模型和视图中使用它.因此,创建一个类似这样的检查应该很容易:

@comment = Comment.find(params[:id])
if current_user.id == @comment.user.id
  # yadda
end 
Run Code Online (Sandbox Code Playgroud)