def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
Помогите мне понять, что происходит в коде выше? Я новичок в Rails/Ruby.Что делает эта строка кода Rails?
Благодаря
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
Помогите мне понять, что происходит в коде выше? Я новичок в Rails/Ruby.Что делает эта строка кода Rails?
Благодаря
Это отрицание (!
) оператор повторяется дважды.
Обратите внимание, что только объекты ruby, имеющие значение false (в булевом выражении), являются nil
и false
.
Поэтому
some_role
будет верно, !some_role
ложно и !!some_role
верно снова.nil
is false, !nil
is true и !!nil
является ложным.Итак, это «умный» способ проверить, не верна ли роль, полученная от find_by_name
, ноль или нет. (И поэтому существует ли роль с таким именем или нет)
Я думаю, мне не нужно говорить вам, что это плохо для читаемости. Вы всегда можете проверить, является ли результат нулем обычным способом, например result.nil?
или result == nil
.
Это более читаемо. Нет необходимости в «себе» или «возврате». 'настоящее время?' противоположность «nil?» поэтому никакого отрицания не требуется.
def role?(role)
roles.find_by_name(role.to_s.camelize).present?
end
Спасибо, не уверен, что я его еще получаю. Как вы могли переписать это для удобочитаемости, для новичков-рельсов? – AnApprentice
@nobosh Я немного переработал его. –
Мне было любопытно, как вы могли бы переписать его, чтобы быть более четким, если это имеет смысл? thxs – AnApprentice