Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 迈克尔·哈特尔';s Rails教程:Rspec';s";预期的响应是重定向到…”;这是错误的_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails 迈克尔·哈特尔';s Rails教程:Rspec';s";预期的响应是重定向到…”;这是错误的

Ruby on rails 迈克尔·哈特尔';s Rails教程:Rspec';s";预期的响应是重定向到…”;这是错误的,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,在Michael Hartl的(精彩的)Rails教程中,我得到了一个意想不到的Rspec测试失败的表单: “预期响应是重定向到 但这是一个 重定向到 " (在第10.3节中可以找到这一点。)因此,从错误中可以看出,服务器正在重定向到适当的页面,除了“请登录”还有一个附加通知。测试代码如下所示: describe "GET 'index'" do describe "for non-signed-in users" do it "should deny access" do get

在Michael Hartl的(精彩的)Rails教程中,我得到了一个意想不到的Rspec测试失败的表单:

“预期响应是重定向到 但这是一个 重定向到 "

(在第10.3节中可以找到这一点。)因此,从错误中可以看出,服务器正在重定向到适当的页面,除了“请登录”还有一个附加通知。测试代码如下所示:

describe "GET 'index'" do

describe "for non-signed-in users" do
  it "should deny access" do
    get :index
    response.should redirect_to(signin_path)
    flash[:notice].should =~ /sign in/i
  end
end

...
我做错什么了吗?我该如何解决这个问题


更新:

如果我把代码改成

response.should redirect_to('http://test.host/signin?notice=Please+sign+in+to+access+this+page.')
然后我得到了实际的Ruby错误

失败/错误:flash[:注意]。应 =~/登录/i 预期:/sign-in/i, get:nil(使用=~)


分辨率

问题是我的拒绝访问函数中省略了一个逗号:

redirect_to signin_path :notice => "Please sign in to access this page."
应该是

redirect_to signin_path, :notice => "Please sign in to access this page."

这把它修好了。现在,这个修复的副作用很有趣,不是吗?这是否意味着
signin_path
本身就是一个可以将散列或参数附加到路径末尾的函数?怪异、狂野、美妙。

您的身份验证方法是什么样子的?我以前没有见过像这样将flash通知添加到查询字符串中:/It使我相信您的方法可能不正确。应该是这样的:

def deny_access
  redirect_to signin_path, :notice => "Please sign in to access this page."
end


打得好,你让我注意到了这个问题。。。看啊!是的,您可以将参数传递到命名路由。请看这是括号较少的代码。加上括号,错误就更容易发现了,IMHO。@zettetic-是的,这曾经是我一直在思考的问题。在我学习Ruby之前,我学习了Python,在Python中,总是只有一种方法可以把事情做对(例如,你必须使用parens;除非,否则没有像
这样的超级结构),而且代码总是一致的。不管是谁写的,看起来都一样。另一方面,Ruby,让你做你觉得最好做的事——这很“有趣”。我想这两种美学都有话要说。@JohnBerryman的答案应该是答案,而不是对问题的编辑。是的,
signin\u path
是Rails生成的一种方法。它可能需要参数,是否使用它们取决于特定的路径。
def deny_access
  flash[:notice] = "Please sign in to access this page."
  redirect_to signin_path
end