检查return语句的AND OR条件

时间:2017-08-09 17:48:37

标签: ruby-on-rails-4

我如何写下面这个表达式? 当用户不是admin时,我想返回false,当user_id与current_user_id不匹配或user_id为空时,我想返回。

  def self.get_user_id(name) 
  current_user_id = User.current.id
  user_id = User.where("name=?" ,name).id
  admin = check_admin(current_user_id)
  return false if[(admin != true) && (user_id != current_user_id)] ||  user_id.blank?
   user_id
 end

 def self.check_admin(id)
 user = User.current 
 admin = Setting.find_by_key("admins").value
 return true  if admin.include?(user.login)
 end

1 个答案:

答案 0 :(得分:0)

在Ruby中,您不需要明确使用return关键字,而且代码中也存在一些错误。试试这个:

def self.get_user_id(name) 
  current_user_id = User.current.id
  user_id = User.find_by(name: name)&.id
  admin = check_admin(current_user_id)
  admin && !(user_id.blank? || user_id != current_user_id)
end

def self.check_admin(id)
  user = User.current 
  admin = Setting.find_by_key("admins").value
  admin.include?(user.login)
end

注意:在第3行,我使用ruby“安全操作符”,假设您使用的是Ruby> = 2.3.0。如果你的ruby版本低于你的版本,你可以使用user_id = User.find_by(name: name).try(:id)