首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Ruby on Rails语法

Ruby on Rails语法
EN

Stack Overflow用户
提问于 2010-12-22 14:32:08
回答 5查看 2K关注 0票数 0

这是其中一个问题,当你知道答案的时候,你会觉得自己很愚蠢,但我就是不能让这个东西工作,所以就这样吧。在railstutorial.org中,我试图在第10章末尾解决练习5,但下面的代码是错误的,并且我尝试的每个变体(例如,使用“除非”)都不起作用。如果当前用户不是管理员用户,我只想执行两行代码。我哪里错了?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def destroy
  if !current_user.admin?
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed."
  end
  redirect_to users_path
end

编辑:我混淆了当前用户和要删除的用户。我使用的是Aditya的代码,我确信它是正确的,但现在我收到了一条“无法运行测试”的消息,表明我的测试中存在语法错误(如下所示)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-22 14:42:48

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

您的if条件没有任何意义。它是说,如果用户不是管理员,就销毁。而我认为只有管理员才能销毁用户。:)

编辑:在阅读了Railstutorial.org第10章的练习5之后,我有了一个更清晰的想法。:)修改销毁操作,防止管理员用户自行销毁。

我知道这可能是作弊,但事实就是如此,我们这些笨蛋就是来帮忙的!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

还有一次编辑,只有管理员不允许倒在剑上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
票数 6
EN

Stack Overflow用户

发布于 2010-12-22 14:45:21

到底是什么不起作用?

检查是否存在具有您正在传递的id参数的用户。如果没有找到具有给定id的用户,则User.find返回nil。在nil上调用销毁会抛出一个错误。

票数 0
EN

Stack Overflow用户

发布于 2010-12-22 14:46:56

由于您编写的代码做了您认为它所做的事情,因此错误出在User#admin?中。要检查它,请打开rails console并手动查找当前用户。它真的是管理员吗?数据库是怎么说的?手动调用admin?,看看它会返回什么。如果用户是根据数据库的管理员,则错误出在admin?-method的实现中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4510204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文