[英]How do I redirect signed-in Users attempt to access User.new and User.create in Ruby?
我要掌握Hartl的Rails教程中的第9章练习 。 我已经尝试了很久了,但无法破解问题6:
登录的用户没有理由在
Users
控制器中访问new
并create
操作。 如果此类用户确实尝试访问这些页面,则安排将其重定向到根URL。
首先,我应该在哪里进行这些测试? 目前,我正在尝试在user_pages_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.
但是,当我在浏览器中测试它并以登录用户身份访问http://localhost:3000/users/new
时,根本没有重定向(这对我来说更有意义,因为我没有编码过)。
我什至从github下载了Hartl的代码,但是我看不到他是否包含了此功能。
编辑:我都
describe "creating a new user" do
before { visit new_user_path }
it { should_not have_selector 'title', text: full_title('Sign Up') }
end
和
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
正常工作。 感谢@Peter de Ridder的帮助
我不太确定为什么在调用new_user_path时为什么会有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
现在测试应该可以按预期进行。 您仍然必须编写代码才能实际进行重定向。 但是,这就是整个挑战。 我个人将检查用户是否已登录/存在。 如果是这样,则不应再访问new和create动作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.