我有一个带有以下路线的rails项目:
get 'login', to: 'user_sessions#new', as: :login
在UserSessionsController
我有
def create
@user_session = UserSession.new(params[:user_session])
respond_to do |format|
if @user_session.save
# Do all the happy stuff
else
format.html { render :action => 'new' }
format.xml { render xml: @user_session.errors, status: :unprocessable_entity }
end
end
end
这样做没问题,但是当用户输入错误的参数时,路由是/user_sessions
而不是/login
,这是不整齐的(这意味着我的测试断言令人困惑)。
显然我可以redirect_to login_path
,但我的@user_session.errors
似乎不可用,所以页面上没有显示错误。
如何重定向回/login
并仍显示错误?
编辑: Rails看起来好像很难,因为这是我不应该尝试做的事情。 RESTful路径并不是用户关心的,所以我不应该将它作为UI测试的一部分。相反,我正在查看用户 关心的呈现页面的实际内容。谢谢大家。
答案 0 :(得分:3)
您可以添加
post 'login', to: 'user_sessions#create', as: :post_login
并相应地更改表单操作。
答案 1 :(得分:0)
这种情况正在发生,因为当您在表单中获得验证错误时,您正在创建操作而不是新操作 。 您的创建操作只是呈现错误的新操作模板,它不向服务器发送请求,因此您的网址保持不变所以要修复它,您只需更改创建的路径行动到此:
post 'login', to: 'user_sessions#create', as: :login
<强>更新强>
您只需更改创建操作的路线,然后在表单中进行更改,如下所示:
<%= from_for @resource, url: login_path do |f| %>
// form fields
<% end %>
如果你要检查你的表单,你会发现它的方法是POST,所以当你提交它时,你的表单会发送一个POST请求,当你在您的浏览器地址栏中点击/登录它会发送GET请求所以在第一种情况下您将创建操作,在第二种情况下您将转到新操作