不满足3个条件时返回false

时间:2017-08-08 18:35:52

标签: ruby-on-rails-4

当用户不是管理员或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

2 个答案:

答案 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