我正在使用Rails 4.0.2和Devise 3.2.2来处理用户注册/身份验证。
我想为Devise的current_user
编写自定义方法,此方法用于检查current_user
登录的次数。我将使用sign_in_count
我是在User模型中编写方法还是应该在Users Controller中定义方法?
是否可以写下面的内容
def count
user = current_user
user.sign_in_count
end
并致电current_user.count
?
谢谢
---- ----编辑
如果我需要添加其他方法,我可以添加类似下面的内容
#app/controllers/post_controller.rb
before_action :check_time
def check_time
time = User.last_sign_in_at(current_user)
if # something
# do bla bla
end
end
答案 0 :(得分:1)
Do I write the method in the User model or should I define the method in Users Controller ?
取决于您希望使用方法
的位置(& when)如果你打算将它作为“控制器级”交互性的一部分使用,你需要将它放入UsersController
,但是如果它将用于“模型级别” (通过多个控制器/模型),您可能希望将其放入模型中
您需要注意的是current_user
是帮手,并且在模型级别不可用:
#app/controllers/products_controller.rb
def lookup
sign_ins = User.sign_in_count(current_user)
if sign_ins > 10
#do something
end
end
#app/models/user.rb
Class User < ActiveRecord::Base
def self.sign_in_count(user)
user = find(user.id)
user.sign_in_count
end
end
但正如@apneadiving
所述,更有效的方法是直接引用current_user.sign_in_count
属性
<强>更新强>
在参考您的更新时,您最好阅读class & instance methods
您可以执行以下方法:
#app/controllers/post_controller.rb
before_action :check_time
private
def check_time
time = current_user.last_sign_in_at
if # something
# do bla bla
end
end
在我对模型/控制器方法的引用中 - 如果要在应用程序级别(例如User.weight_gain?
)提供标准功能,则可以使用模型方法。如果您使用的是以控制器为中心的数据,则最好将其全部保存在控制器中