首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >railstutorial.org,第9章练习,9

railstutorial.org,第9章练习,9
EN

Stack Overflow用户
提问于 2013-02-10 10:45:54
回答 1查看 713关注 0票数 2

这样做的目的是为了让管理员用户不会自毁。我写了以下测试:

代码语言:javascript
复制
describe "as admin user" do
  let(:admin) { FactoryGirl.create(:admin) }
  before { valid_signin admin }

  describe "should not be able to delete himself by submitting a DELETE request to the Users#destroy action" do
    specify do
      expect { delete user_path(admin) }.not_to change(User, :count).by(-1)
    end
  end
end

并修改了销毁操作,如下所示:

代码语言:javascript
复制
def destroy
  @user = User.find(params[:id])
  unless current_user?(@user)
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed."
    redirect_to users_url
  end
end

(如果您是管理员用户,则只能访问销毁操作)。

测试现在应该通过了,但它没有通过。我得到以下错误消息:

代码语言:javascript
复制
Failure/Error: expect { delete user_path(admin) }.not_to change(User, :count).by(-1)
     ActionView::MissingTemplate:
       Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

我不理解缺少模板的错误消息,也不明白为什么测试不能通过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-10 11:34:44

尝试将您的destroy操作更改为如下所示,看看您的测试是否通过:

代码语言:javascript
复制
def destroy
  user = User.find(params[:id])
  unless current_user?(user)
    user.destroy
    flash[:success] = "User destroyed."
  else
    flash[:error] = "You can't destroy yourself."
  end
  redirect_to users_url
end

我认为问题在于,只有在成功销毁用户的情况下,您才会重定向到users_url。如果你不这样做(即管理员试图自毁),那么就没有重定向,Rails将开始查找名为destroy.html.erb,not find one anywhere的视图,并引发异常。这也是为什么方法中的用户变量从@user更改为user的原因:局部变量可以代替实例变量,因为它不需要在视图中使用。

如果这不是问题所在,请编辑您的问题,在当前代码中包含指向Github存储库的链接。

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

https://stackoverflow.com/questions/14794181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档