2014-07-22 64 views
1

我正在使用devise gem在我的RoR应用中验证用户身份。我添加了一些逻辑。例如只显示某些链接或内容,如果用户已登录,像这样<% if user_signed_in? %>,然后一些内容......与<% end %>用户登录后只显示一次html内容

现在的结局,我想这样做是显示内容(例如div用款在其中)只有第一次会议 - 用户第一次登录我的网站。

有关如何在Ruby中实现这种逻辑的任何提示?

回答

1

Tiago Farias与此正确的 - 这将是一个工作为sign_in_count属性指示user了多少次登录:

enter image description here

我试着做与Kirti Thorat之前类似的东西,但我们发现有随着次数的问题Devise存储sign_in_count - 类似的东西从0什么

开始 -

反正不是打扰Tiago Farias'答案,你基本上只需要做到这一点:

<% if user_signed_in && current_user.sign_in_count == "1" %> 
    HTML here! 
<% end %> 
+0

哦,来吧@Cyzanfar!此外,这个逻辑应该在控制器中,而不是在视图中。 –

+0

是的,你真的应该给予'蒂亚戈法里亚斯'接受的答案 - 他是第一个&提供的信息。但是,我不同意它“应该在控制器中” - 如果他想显示一个“div”,则必须在视图中放置条件逻辑 –

0

如果您的意思是用户第一次登录您的网站,您可以在用户模型(表格)中添加一个字段,例如,布尔见过。 如果您仅指的是当前会话,则可以在用户会话中存储信息。 无论哪种方式,如果您想在用户第一次登录时提供新的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。

+0

我正在谈论有史以来第一次用户登录。您能更具体地了解我需要添加到我的用户模型中的te字段吗? – Cyzanfar

1

Devise有一个名为Trackable的模块,其中包含了为用户计数sign_in的逻辑。从DOC:

sign_in_count - 增加每次在由符号(由形式, 的OpenID,OAuth的)

只需添加可跟踪模块中的模型,然后在你的代码:

if current_user.sign_in_count == 1 
    welcome_path 
else 
    #do something else 
end 
+0

我记得有些东西不能用于这个 - 设计做一些奇怪的sign_in_count;我已经忘了它到底是什么,它就像是有你需要的文件 –

+1

这只是你必须做“== 1”而不是“== 0”。 –