Rails 3 - оператор IF, который не ломается на NIL - PullRequest
2 голосов
/ 19 сентября 2010

У меня есть следующее выражение if:

if !projectid_viewing.nil? && !user.role(projectid_viewing).nil? && user.role(projectid_viewing) == 'admin'

То, что я пытаюсь сделать с вышеприведенным, не имеет, если перерыв равен projectid_viewing или user.role равны нулю.projectid_viewing, кажется, работает отлично, но user.role продолжает ломаться, выдавая следующую ошибку:

undefined method `role' for nil:NilClass

Можете ли вы помочь мне с оператором if и есть ли более элегантный способ написать оператор?

1 Ответ

5 голосов
/ 19 сентября 2010

Вы должны убедиться, что пользователь также не равен нулю.

Обратите внимание, что в Ruby значение nil в условном выражении будет интерпретироваться как ложное. Таким образом, если вы используете переменную со значением nil в условном выражении, она также будет иметь значение false. Зная это, вы можете упростить такие выражения, как !projectid_viewing.nil?, до простого имени переменной, и она будет работать точно так же.

if projectid_viewing && user && user.role(projectid_viewing) == 'admin'

Выше приведено просто Ruby, но вы сказали, что используете Rails 3. В Rails есть небольшой метод: Object # try . Это позволит вам упростить это утверждение до следующего:

if projectid_viewing && user.try(:role, projectid_viewing) == 'admin'

Метод Object # try защитит вас, если значение user равно nil, и вся эта вторая часть выражения вернет nil (т.е. false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...