我想创建一个简单的登录表单,用户应该能够登录。我希望它重定向到用户show动作,但是重定向到.../sessions
,我希望它重定向到` ... /用户/ 1。我有一个看起来像这样的会话控制器(我一直在关注Rails教程书)
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
sign_in user
redirect_to user
else
render 'new'
end
end
我尝试将redirect_to user
更改为redirect_to users_path(user)
,但它不起作用。
我的路线如下:
root :to => 'pages#home'
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
sessions / sessions.new.html.erb看起来像这样:
<%= form_tag sessions_path do %>
<%= text_field_tag :email, params[:email], :placeholder => "E-post" %>
<%= password_field_tag :password, nil, :placeholder => "Lösenord" %>
<%= submit_tag "Logga in" %>
<% end %>
我的导轨技能有点生疏,所以它可能是基本的东西。
更新
我设法通过在会话控制器中创建索引操作来“解决”它,该控制器在被调用时重定向到正确的路径。我不知道(或认为)这是最佳的方式。最初的问题是,当用户登录时,由于某种原因,它被重定向到/sessions
,而不是我想要的根路径。当用户更新浏览器时,应用程序崩溃(因为我的会话控制器中没有索引操作)。我不知道为什么它没有重定向到正确的路径,我也尝试redirect_to user_path(用户),但结果相同。关于如何以“正确”方式解决问题的任何提示都会很棒!用户注册时我也遇到了同样的问题,重定向到/users
而不是/
。
答案 0 :(得分:2)
检查哪些佣金路线返回给您,您应该找到用户页面的路线。你应该使用像
这样的东西redirect_to user_path(user)
答案 1 :(得分:1)
听起来你的行为正在落入其他条件并因此进行渲染:action =&gt;“new”而不是你正在寻找的重定向。在渲染动作的情况下,url会显示类似于你描述的“... / sessions”,因为表单可能(并且正确地)对该URL执行POST但是已经失败并且在没有重定向的情况下重新呈现。
换句话说,我认为你的user.authenticate(...)可能是失败的,或者由于某种原因返回nil或false。
<强>更新强>
由于您正在使用jquerymobile,因此您重定向到的页面正在进行AJAX。documentation(请参阅重定向和链接到目录部分)说您可以在div上使用data-url属性具有数据角色作为控制网址的页面。因此,对于您的示例,将app / pages / home中的内容包装在“page roled”div标签中,并将data-url设置为您想要的任何内容...例如:
<div data-role="page" data-url="/home">
<% if signed_in? %>
<%= render "signed_in"%>
<% else %>
<%= render "home_page" %>
<% end %>
</div>