Вы должны убедиться, что пользователь также не равен нулю.
Обратите внимание, что в 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).