首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hartl的Rails教程第9章练习6

Hartl的Rails教程第9章练习6
EN

Stack Overflow用户
提问于 2012-06-20 19:36:29
回答 3查看 1.4K关注 0票数 7

Updating, showing, and deleting users, exercises

有没有办法为" create“和”new“这样的用户控制器操作创建一个Rspec测试?

我也不太清楚"create“和"new”这两个动作本身的区别;能不能请谁来详细解释一下?

创建测试后,我将如何着手实现redirect_to root_path?我想我应该在before_filter signed_in部分包含“新建”和“创建”操作,但这不会自动重定向到根目录。

我尝试通过修改users_controller.rb文件来通过测试,如下所示:

代码语言:javascript
复制
  def create
    if signed_in?
      redirect_to root_path
    else
      @user = User.new(params[:user])
      if @user.save
        sign_in @user
        flash[:success] = "Welcome to the Sample App!"
        redirect_to @user
      else
        render 'new'
      end
    end
  end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 19:55:45

  1. 是的;这部分是在7.16和其他地方开始的。
  2. One实际上创建了一个用户(create)。一个是用于创建新用户的页面,(new).
  3. Not确保我理解了问题。
票数 1
EN

Stack Overflow用户

发布于 2012-07-02 12:29:42

我之前做了一个过滤器,似乎效果很好,我做的测试是这样的:

在authentication_pages_spec.rb上

代码语言:javascript
复制
describe "signin" do
  describe "authorization" do
    describe "for signed in users" do
      let(:user) { FactoryGirl.create(:user) }
      let(:new_user) { FactoryGirl.attributes_for(:user) }
      before { sign_in user }

      describe "using a 'new' action" do
        before { get new_user_path }
        specify { response.should redirect_to(root_path) }
      end

      describe "using a 'create' action" do
        before { post users_path new_user }
        specify { response.should redirect_to(root_path) }
      end         
    end
  end
end

就像@WillJones所说的,有些人可能不得不将no_capybara: true添加到before代码块中

在我的用户控制器上:

代码语言:javascript
复制
before_filter :signed_in_user_filter, only: [:new, :create]

def signed_in_user_filter
  redirect_to root_path, notice: "Already logged in" if signed_in?
end

对于新建操作和创建操作之间的区别,它与REST体系结构样式有关,但基本上,new是来自用户控制器的响应GET请求的操作,并且负责返回它响应的视图(在本例中,是一个新的用户表单)。另一方面,create是一个响应POST请求的操作,它不呈现任何东西(它可以用javascript响应,但这是一个高级主题),它负责创建新用户,正如该操作的名称所暗示的那样。

票数 10
EN

Stack Overflow用户

发布于 2013-02-20 16:49:03

我也为此做了一个之前的过滤器,但我的过滤器是不同的,我不明白它为什么工作。

我的用户控制器具有以下条目

代码语言:javascript
复制
   class UsersController < ApplicationController
.
.
  before_filter :logged_in_user, only: [:new, :create]
.
.
def logged_in_user
      redirect_to(root_path) if !current_user?(@user)
  end

它和rkrdo的例子一样工作得很好,相应的测试也通过了。但这是否意味着当用户登录时,current_user就不同于用户了,反之亦然?在我看来,它们在第一种情况下应该是相等的,在第二种情况下就不应该是相同的了。

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

https://stackoverflow.com/questions/11118680

复制
相关文章

相似问题

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