我正在使用devise gem在我的RoR应用中验证用户身份。我添加了一些逻辑。例如只显示某些链接或内容,如果用户已登录,像这样<% if user_signed_in? %>
,然后一些内容......与<% end %>
用户登录后只显示一次html内容
现在的结局,我想这样做是显示内容(例如div
用款在其中)只有第一次会议 - 用户第一次登录我的网站。
有关如何在Ruby中实现这种逻辑的任何提示?
我正在使用devise gem在我的RoR应用中验证用户身份。我添加了一些逻辑。例如只显示某些链接或内容,如果用户已登录,像这样<% if user_signed_in? %>
,然后一些内容......与<% end %>
用户登录后只显示一次html内容
现在的结局,我想这样做是显示内容(例如div
用款在其中)只有第一次会议 - 用户第一次登录我的网站。
有关如何在Ruby中实现这种逻辑的任何提示?
Tiago Farias
与此正确的 - 这将是一个工作为sign_in_count
属性指示user
了多少次登录:
我试着做与Kirti Thorat
之前类似的东西,但我们发现有随着次数的问题Devise
存储sign_in_count
- 类似的东西从0
什么
开始 -
反正不是打扰Tiago Farias'
答案,你基本上只需要做到这一点:
<% if user_signed_in && current_user.sign_in_count == "1" %>
HTML here!
<% end %>
如果您的意思是用户第一次登录您的网站,您可以在用户模型(表格)中添加一个字段,例如,布尔见过。 如果您仅指的是当前会话,则可以在用户会话中存储信息。 无论哪种方式,如果您想在用户第一次登录时提供新的div,只需检查新字段的值(可见)并显示或隐藏html。
修订
创建迁移
class AddRoleToUser < ActiveRecord::Migration
def change
add_column :users, :already_seen, :boolean, :default => false
end
end
上面的代码将新的一列与假添加到用户表作为缺省值
第一次用户将登录的值already_seen将是错误的。
如果already_Seen为false,则会显示html元素,否则您不会。
显示您的div元素后,您必须将already_seen的值更改为true,例如,
user.already_seen = true
user.save()
当用户第一次登录后,您将不会显示div元素,因为already_see的值等于true。
我正在谈论有史以来第一次用户登录。您能更具体地了解我需要添加到我的用户模型中的te字段吗? – Cyzanfar
Devise有一个名为Trackable的模块,其中包含了为用户计数sign_in的逻辑。从DOC:
sign_in_count - 增加每次在由符号(由形式, 的OpenID,OAuth的)
只需添加可跟踪模块中的模型,然后在你的代码:
if current_user.sign_in_count == 1
welcome_path
else
#do something else
end
我记得有些东西不能用于这个 - 设计做一些奇怪的sign_in_count;我已经忘了它到底是什么,它就像是有你需要的文件 –
这只是你必须做“== 1”而不是“== 0”。 –
哦,来吧@Cyzanfar!此外,这个逻辑应该在控制器中,而不是在视图中。 –
是的,你真的应该给予'蒂亚戈法里亚斯'接受的答案 - 他是第一个&提供的信息。但是,我不同意它“应该在控制器中” - 如果他想显示一个“div”,则必须在视图中放置条件逻辑 –