Предположим, у меня есть класс Active Record
.Рубин проверить, является ли метод цепочки valud
Если у меня есть:
Дом, который имеет много людей, у которых есть много собак, у которых есть много ошейников.
Я не буду использовать определения схемы, поскольку они тривиальны.
Теперь я хочу со страницы, где у меня есть объект дома, чтобы прорезать все ворота в этом доме.
Итак:
for c in house.people.dogs.collars do
puts c
end
Если нет людей в доме, то я получу undefined method
ошибку, когда цепь попадает people.dogs
.
Я могу обойти это двумя способами. Я могу заключить все это в гнездо операторов if, проверяя один уровень за раз и выполняя только указанный выше код, если я сначала проверил все части цепочки. Я также мог бы использовать begin
и rescue
.
Мой вопрос:
Есть еще один способ сделать это? Некоторые методы, которые позволили бы мне сделать что-то вроде:
for c in foo(house.people.dogs.collars) do
puts c
end
без каких-либо других кодов. Foo будет проверять, действительно ли цепочка действительна, а затем выполнить ее, иначе она молча ничего не сделает. Если нет лучшего способа сделать это, я просто сделаю функцию самостоятельно и верю хэш или массив в качестве обеспечения.
В Rails: 'house.people.try (: dogs) .try (: collars)'? –