例えばUserモデルとBookモデルがあって
User has_many Booksな関係であるとします。
そうした場合に
ruby
1book = Book.find(1) 2if book.user.name == 'bob' 3 puts '貸出禁止です' 4end
みたいなコードがあったとした場合に、BookがUserを持ってなかったとしたら、book.user
はnilなのでnil.name
になってしまいundefined method 'name' for nil:NilClass
とエラーがでると思います。
ここで疑問なのですが、Userの存在チェックをしつつnameにアクセスするスマートな方法はありますでしょうか?皆様ならどう書かれますか?
ruby
1book = Book.find(1) 2book2 = Book.find(2) 3if (book.user.present? and book.user.name == 'bob') and (book2.user.present? and book.user.name == 'taro') 4 puts '貸出禁止です' 5end
などでも、もちろん間違いではありませんが、チェックする数が増えるとなんかスマートじゃない気がします。
よろしくお願いします。
(例のコードは全く意味を持ちません)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/24 08:02