当用户不是管理员或user_id不等于current_user id或用户对象为空时,我试图为方法返回false。 并想知道这是否是最好的方法呢?
def self.get_user_id(fname,lname)
user_id = User.where("fname=? AND lname=?",fname,lname).pluck(:id)
current_user = User.current.id
return false if !@timesheet_admin? || (user_id != curent_user) || user_id.blank?
user_id
end
答案 0 :(得分:0)
您应该能够缩短它以仅返回已计算的表达式,因为它的计算结果为布尔值
return !@timesheet_admin? || (user_id != curent_user) || user_id.blank?
答案 1 :(得分:0)
您目前在代码中返回了一系列ID的问题。您还将id变量命名为记录,这可能会令人困惑。让我们先尝试清理它。
第1步
def self.get_user_id(fname,lname)
user_id = User.find_by(fname: fname, lname: lname).id
current_user_id = User.current.id
return false if !@timesheet_admin? || (user_id != current_user_id) || user_id.blank?
user_id
end
好的,现在我们可以看到更多的逻辑了。你在这里有一个类实例变量,这在最坏的情况下似乎是危险的,而且最多也很难理解。这可能是你问题的一部分。我们假设它不是。这是显示可能更具可读性的逻辑的另一种方式。
第2步
def self.invalid_id?(user_id, current_user_id)
!@timesheet_admin? ||
user_id != current_user_id ||
user_id.blank?
end
def self.get_user_id(fname,lname)
user_id = User.find_by(fname: fname, lname: lname).id
current_user_id = User.current.id
invalid_id?(user_id, current_user_id) ? false : user_id
end