Baz*_*ley 0 ruby ruby-on-rails
这是你知道如果你知道答案就会让你觉得愚蠢的问题之一,但我不能让这件事情起作用,所以这里就是这样.在railstutorial.org中我试图解决第10章末尾的练习5但是下面的代码有问题,我尝试的每个变体(例如使用'除')都不起作用.如果当前用户不是管理员用户,我只想执行两行代码.我哪里错了?
def destroy
if !current_user.admin?
User.find(params[:id]).destroy
flash[:success] = "User destroyed."
end
redirect_to users_path
end
Run Code Online (Sandbox Code Playgroud)
编辑:我将当前用户与要删除的用户混淆.我正在使用Aditya的代码,我确信它是正确的,但现在我收到一条"无法运行测试"的消息,表明我的测试中存在语法错误(如下).
describe "as an admin user" do
before(:each) do
admin = Factory(:user, :email => "admin@example.com", :admin => true)
test_sign_in(admin)
end
it "should not allow an admin user to destroy himself" do
lambda do
delete :destroy, :id => admin
end.should_not change(User, :count)
end
end
Run Code Online (Sandbox Code Playgroud)
def destroy
if current_user.admin?
# If the current user IS admin
User.find(params[:id]).destroy # Find the user and destroy it
flash[:success] = "User destroyed." # Set the flash
end
redirect_to users_path # Go to users.
end
Run Code Online (Sandbox Code Playgroud)
你的if条件没有意义.它说如果用户不是管理员,则销毁.而我想象只有管理员可以摧毁用户.:)
编辑:在阅读了Railstutorial.org第10章练习5之后,我得到了一个更清晰的想法.:)修改销毁操作以防止管理员用户破坏自己.
我知道这可能是作弊,但这是如此,我们的吸盘在这里提供帮助!
def destroy
user = User.find(params[:id])
if user != current_user
user.destroy
flash[:notice] = "User destroyed".
else
flash[:error] = "Suicide is immoral."
end
redirect_to users_path
end
Run Code Online (Sandbox Code Playgroud)
另一个编辑,只有管理员不允许落在剑上.
def destroy
user = User.find(params[:id]) # Find the victim
if (user == current_user) && (current_user.admin?)
flash[:error] = "Suicide is immoral."
else
user.destroy
flash[:notice] = "User destroyed".
end
redirect_to users_path
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |