Ruby on rails 4 检查return语句的AND或OR条件
下面这个表达式怎么写? 如果用户不是管理员,并且用户id与当前用户id不匹配,或者用户id为空,我希望返回falseRuby on rails 4 检查return语句的AND或OR条件,ruby-on-rails-4,Ruby On Rails 4,下面这个表达式怎么写? 如果用户不是管理员,并且用户id与当前用户id不匹配,或者用户id为空,我希望返回false 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) &&
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“安全操作符”,它假设您使用的是ruby>=2.3.0。如果您的ruby版本低于此版本,您可以使用
user\u id=user.find\u by(name:name)。在ruby中尝试(:id)
,您不需要显式使用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\u id=user.find\u by(name:name)。try(:id)