管理员?不适用于Mongo Mapper

时间:2011-10-12 05:08:44

标签: ruby-on-rails-3 mongodb mongomapper

我尝试使用MongoDb并使用Rails教程创建用户。我正在使用Mongo_mapper gem。我已经完成所有设置,但我似乎似乎ActiveRecord函数/方法似乎不起作用。我的所有测试都是这样做的。

我切换了!通过在APIDock

中查找切换源将其添加到我的用户模型来工作
  def toggle!(field)
    send "#{field}=", !self.send("#{field}?")
    save 
  end

但是当我尝试这个函数来查看用户模型是否为admin的布尔值

  def admin?
    self.admin
  end

我的测试中出现此错误。

 1) UsersController DELETE 'destroy' as a non-signed-in user should deny access
     Failure/Error: delete :destroy, :id => @user
     NoMethodError:
       undefined method `admin?' for nil:NilClass
     # ./app/controllers/users_controller.rb:66:in `admin_user'
     # ./spec/controllers/users_controller_spec.rb:253:in `block (4 levels) in <top (required)

这是我对控制器的看法

class UsersController < ApplicationController
  before_filter :authenticate, :only => [:index, :edit, :update]
  before_filter :correct_user, :only => [:edit, :update]
  before_filter :admin_user,   :only => :destroy
.
.
.  

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User deleted."
    redirect_to users_path
  end

  private

    def authenticate
      deny_access unless signed_in?
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end

    def admin_user
      redirect_to(root_path) unless current_user.admin?
    end

但我确实获得了管理员权限,可以与我的管理员用户合作,我可以删除用户。

<li>
    <%= link_to user.name, user %>
    <% if current_user.admin? %>
        <%= link_to "delete", user, :method => :delete, :confirm => "You sure?",
                                    :title => "Delete #{user.name}" %>
    <% end %>
</li>

有关如何修复此问题的任何建议,因为我在删除用户后仍然遇到如何让应用重定向。

1 个答案:

答案 0 :(得分:1)

由于您在测试期间没有登录用户,current_usernil,这正是您获得的错误。

所以你需要处理current_user为零的情况:

def admin_user
  redirect_to(root_path) unless current_user.try(:admin?)
end

try方法将处理在nil对象上调用它的情况。 http://api.rubyonrails.org/classes/Object.html#method-i-try