0

我正在尝试创建一个简单的登录表单,用户应该可以在其中登录。我希望它重定向到用户显示操作,但它重定向到.../sessions,我希望它重定向到`.../users/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 userredirect_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

session/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 %>

我的rails技能有点生疏,所以它可能是基本的东西。

更新

我设法通过在我的会话控制器中创建一个索引操作来“解决”它,该操作在被调用时重定向到正确的路径。我不知道(或认为)这是最好的方法。最初的问题是,当用户登录时,由于某种原因它被重定向到/sessions,而不是我想要的根路径。当用户更新浏览器时,应用程序崩溃(因为我的会话控制器中没有索引操作)。我不知道为什么它没有重定向到正确的路径,我也尝试了 redirect_to user_path(user),但结果相同。有关如何以“正确”方式解决它的任何提示,都会很棒!当用户注册时我也遇到了同样的问题,它重定向到/users而不是/.

4

2 回答 2

2

检查哪些 rake 路由返回给您,您应该在那里找到用户页面的路由。你应该使用类似的东西

redirect_to user_path(user)
于 2012-04-18T15:04:20.810 回答
1

听起来您的操作正在落入 else 条件,因此执行渲染 :action=>"new" 而不是您正在寻找的重定向。在渲染操作的情况下,url 将显示类似于您描述的“.../sessions”的内容,因为表单可能(并且正确地)对该 url 执行 POST 但失败并且正在重新渲染而不重定向.

换句话说,我认为您的 user.authenticate(...) 可能失败或由于某种原因返回 nil 或 false。

更新:

由于您使用的是 jquerymobile,因此您重定向到的页面正在 AJAX 中。文档(请参阅重定向和链接到目录部分)说您可以在具有 data-role 的 div 上使用 data-url 属性页面来控制 url。因此,对于您的示例,将 app/pages/home 中的内容包装在“页面角色”div 标签中,并为您想要的任何内容设置 data-url ...例如:

<div data-role="page" data-url="/home">
<% if signed_in? %>
  <%= render "signed_in"%>
<% else %>
  <%= render "home_page" %>
<% end %>
</div>
于 2012-04-18T16:07:58.533 回答