检查返回语句的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)