在Devise中每天登录计数

时间:2013-12-17 15:40:45

标签: ruby-on-rails ruby devise

有没有办法找出用户每天有多少次独特登录?

我们可以跟踪用户以了解sign_in的用户数或用户登录的时间:

User.last.sign_in_count

User.last.last_sign_in_at

但不是每天他登录的时间。

4 个答案:

答案 0 :(得分:3)

以下是我在rails应用中所做的事情:

我创建了一个新模型来跟踪每次访问

rails g model Visit user_id:integer user_ip:inet user_email:string

然后

rake db:migrate

接下来,我创建了一个控制器来跟踪

的会话
app/controllers/track_sessions_controller.rb

info about devise session controller

然后我添加了在每次成功登录后运行的代码

class TrackSessionsController < Devise::SessionsController
  after_filter :after_login, :only => :create

  def after_login
    Visit.create!(user_id: current_user.id, user_ip: current_user.current_sign_in_ip, user_email: current_user.email)
  end
end

然后更新routes.rb的这一部分

devise_for :users

devise_for :users, :controllers => { :sessions => "track_sessions" }

如果您想查看用户每天有多少次唯一登录,您现在可以执行以下操作:

User.all.each do |user|
  logins_per_day(user.id) 
end

def logins_per_day(user_id)
  dates_visited = Visit.where(user_id: user_id).select('distinct created_at').all.collect{|x| x[:created_at].to_date}
  puts "************* USER ID #{user_id} *************"
  dates_visited.group_by {|date| date}.map {|date_visited, times_visited| puts "Date Visited: #{date_visited} Times Visited: #{times_visited.count}"}
end

答案 1 :(得分:1)

你可以做的是创建一个像日志一样工作的表,在那里你输入每个登录,或者,你可以做的是,在你的传递登录控制后得到de登录的yor soucer代码创建一个.txt并插入.txt用户名和日期,但不好的一面是日志将在计算机上。

如果你选择使用tablein sql,acces或者你想要的任何东西,只需选择一个解决方案。

从table_log_login中选择count(*),其中user ='user'和date ='yyyy-mm-dd';

答案 2 :(得分:0)

我无法理解你想要的东西,所以:

如果要计算每天的登录次数,可以为登录方法创建一个后置过滤器,用于检查日期(假设您有一个表格,用于跟踪具有日期的登录次数)。

如果您想知道用户登录的连续天数,您可以执行相同的操作,而是保存开始日期和结束日期,以便了解“条纹”何时结束。

PS:如果你有英语问题,用英语和任何其他语言发布你都会说得很流利,所以有人可以正确翻译。

答案 3 :(得分:0)

好的,对不起,我理解得很好,但写得不太好,比试试用两种语言。

当您登录程序时,在日志表中插入数据库,当程序关闭时,更新行,使用login start插入并使用login end更新,可以在sqlserver中使用smalldatetime或在mysql中使用datetime,因此,您可以毫无问题地选择登录的日期,小时或分钟。

想一想: 插入tb_login(cod_login,cd_user,dt_start)值('26','5','2013-12-30 08:02'); 注意:您需要一个接受null的列,列是“dt_end”

比你更新 更新集dt_end ='2013-12-30 10:10'来自tb_login,其中cod_login ='26';


我的母语(葡萄牙语):

好的,desculpa,entendo bem masnãescrevoigualmente bem,entãvamostentar em duas linguas

quandodocêlogano seu programa,vocêinterrena tabela de login e quando encerra o programa,o mesmo realizaumaatualizaçãnalinha com a data de log out,vocêpodeusar“smalldatetime”no SqlServer ou“DateTime”no mysql ,então,épauseivelselecionar sem problemas o dia,hora ou minutor dos logins。

nenseso: 插入tb_login(cod_login,cd_user,dt_start)值('26','5','2013-12-30 08:02'); nota:voce precisa ter uma coluna que aceita“null”,colunaé“dt_end”

不可思议 更新集dt_end ='2013-12-30 10:10'来自tb_login,其中cod_login ='26';