如何允许创建者使用Devise on Rails3销毁自己的记录

时间:2012-07-09 14:22:38

标签: ruby-on-rails ruby-on-rails-3 devise

当用户登录时,只有创建记录的用户才能销毁自己的记录。 我应该在下面的代码中添加什么?

  def destroy

    @topic = Topic.find(params[:id])
    @topic.destroy
    flash[:notice] = "topic deleted!"

  end

1 个答案:

答案 0 :(得分:1)

您所寻找的并不是真正的设计,而是像CanCan这样的授权解决方案。

Devise只能验证用户身份并验证他们是否已登录并处于活动状态。您需要的是一种确定用户是否有权删除此主题的方法。

你当然可以自己动手:

  def destroy
    @topic = Topic.find(params[:id])
    if @topic.user_id == current_user.id
      @topic.destroy
      flash[:notice] = "topic deleted!"
    else
      flash[:error] = "not allowed"
    end
  end

(代码假设您在主题中设置了belongs_to :creator, :class_name => :user关联。但是您明白了。

但使用像CanCan之类的东西会让你的生活变得更轻松,并且会将代码缩减为:

  def destroy
    @topic = Topic.find(params[:id])
    authorize! :destroy, @topic
    @topic.destroy
    flash[:notice] = "topic deleted!"
  end

使用您的能力文件(请参阅defining abilities)设置如下:

can :manage, Topic, :owner_id => user.id