检查返回语句的AND OR条件

问题描述:

我该如何写下面的表达式? 我想在用户不是admin时返回false,并且user_id与current_user_id不匹配,或者user_id为空。检查返回语句的AND OR条件

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 

在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> = 2.3.0。如果您的ruby版本低于您的版本,您可以使用user_id = User.find_by(name: name).try(:id)