Rails路由,在创建新会话时重定向到错误的URL

时间:2012-04-18 14:57:48

标签: ruby-on-rails session

我想创建一个简单的登录表单,用户应该能够登录。我希望它重定向到用户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而不是/

2 个答案:

答案 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>