我尝试使用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>
有关如何修复此问题的任何建议,因为我在删除用户后仍然遇到如何让应用重定向。
答案 0 :(得分:1)
由于您在测试期间没有登录用户,current_user
为nil
,这正是您获得的错误。
所以你需要处理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