繁体   English   中英

如何重定向已登录的用户尝试在Ruby中访问User.new和User.create?

[英]How do I redirect signed-in Users attempt to access User.new and User.create in Ruby?

我要掌握Hartl的Rails教程中的第9章练习 我已经尝试了很久了,但无法破解问题6:

登录的用户没有理由在Users控制器中访问newcreate操作。 如果此类用户确实尝试访问这些页面,则安排将其重定向到根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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM