after_sign_in_path_for

时间:2013-01-23 10:17:27

标签: ruby-on-rails devise

我在我的应用程序中使用devise

我想在用户登录时弹出欢迎信息。

所以我的application_controller.erb我定义了:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :authenticate_user!

  def after_sign_in_path_for(user)
    alert('Welcome!')
  end

  def after_sign_out_path_for(user)
    new_user_session_path
  end
end

当我尝试登录我的应用时,出现错误:

ArgumentError in Devise::SessionsController#create

wrong number of arguments (1 for 0)
Rails.root: /home/alon/alon/todolist

Application Trace | Framework Trace | Full Trace
app/controllers/application_controller.rb:14:in `after_sign_in_path_for'

3 个答案:

答案 0 :(得分:4)

默认设置添加Flash消息。无需设置flash消息。只需在视图中显示flash消息即可。请尝试以下代码。

/ views / layouts / application.html.erb

中的

<% flash.each do |type, message| %>
  <div class="flash">
     <%= message %>
  </div>        
<% end %> 

FYI after_sign_in_path_for不用于设置flash消息。只需通知路径即可在成功登录后设置应用程序的重定向位置。

让我们设置成功的登录重定向路径

你在config / routes.rb

中的

match "users/dashboard" => "controllername#action"

最后更改after_sign_in_path_for方法

def after_sign_in_path_for(user)
  users_dashboard_path
end

答案 1 :(得分:2)

您正在从rb文件调用javascript函数'alert()'。您应该在

中定义路径
  def after_sign_in_path_for(user)
    some_path
  end

并使用javascript_tag

在视图中使用alert()

答案 2 :(得分:0)

如果你安装了Bootstrap,这是我发现做警报信息的最好方法。

app/views/layouts/application.html.erb正上方<%= yield %>

中添加此内容
<% if notice %>
  <p class="alert alert-success"><%= notice %></p>
<% end %>
<% if alert %>
  <p class="alert alert-danger"><%= alert %></p>
<% end %>


我是从RailsGirls

得到的