Ruby on rails 如何重定向登录用户尝试访问Ruby中的User.new和User.create?
我要学习Hartl的Rails教程中的。我已经试了很久了,但无法破解问题6: 登录用户没有理由访问Ruby on rails 如何重定向登录用户尝试访问Ruby中的User.new和User.create?,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,我要学习Hartl的Rails教程中的。我已经试了很久了,但无法破解问题6: 登录用户没有理由访问用户控制器中的新建和创建操作。如果这些用户试图访问这些页面,请安排将其重定向到根URL 首先,我应该把这些测试放在哪里?目前我正在尝试user\u pages\u spec.rb,但我不确定这是否正确。那么我应该把逻辑放在哪里呢 第二,我的测试应该是这样的: describe "after signing-in" do before { sign_in(user) } descr
用户
控制器中的新建
和创建
操作。如果这些用户试图访问这些页面,请安排将其重定向到根URL
首先,我应该把这些测试放在哪里?目前我正在尝试user\u pages\u spec.rb
,但我不确定这是否正确。那么我应该把逻辑放在哪里呢
第二,我的测试应该是这样的:
describe "after signing-in" do
before { sign_in(user) }
describe "creating a new user" do
before { put new_user_path }
specify { response.should redirect_to(root_url) }
end
end
在我执行上述操作时,RSpec告诉我
Expected response to be a redirect to but was a redirect to http://www.example.com/signin.
及
正常工作。感谢@Peter de Ridder的帮助我真的不知道为什么在调用新用户路径时会有put请求
describe "after signing-in" do
let(:user) { FactoryGirl.create(:user) }
before { sign_in user }
describe "creating a new user" do
before { get new_user_path }
specify { response.should redirect_to(root_url) }
end
end
现在,测试应该按照预期的那样工作。您仍然需要编写代码来实际执行重定向。但是,嘿,这就是全部的挑战。我个人会检查用户是否已登录/在场。如果是,则“新建”和“创建”操作将不再可访问。谢谢。但如图所示,
response
不接受visit
,因为它不是ActionDispatch::Request
。相反,我使用了it{should\u not_selector'title',text:full\u title('Sign Up')}
来查看是否发生了重定向。此测试通过,但在浏览器中执行此操作时没有重定向。有没有关于如何诊断这种看似不匹配的想法?忽略我第一次评论中的问题。测试正在运行。是的,我会的,但如果您将visit
更改为get
,或者将指定{response.should重定向到(root\u url)}
更改为它{不应该有选择器'title',text:full\u title('Sign')}
,这可能是个好主意。我第一次写测试的时候犯了一个小错误。还有更多的帮助
describe "creating a new user" do
before { get new_user_path } # note the use of GET here not PUT
specify { response.should redirect_to(root_url) }
end
describe "after signing-in" do
let(:user) { FactoryGirl.create(:user) }
before { sign_in user }
describe "creating a new user" do
before { get new_user_path }
specify { response.should redirect_to(root_url) }
end
end