読者です 読者をやめる 読者になる 読者になる

MogLog

メモというか日記というか備忘録というか

RailsのアソシエーションまわりでNoMethodErrorが起こった時に思い出したいこと

1週間くらい前にも全く同じ所で30分くらい固まっていたのに、また同じ所で15分くらい詰まっていたので自分用にメモをしておく。

・外部キーの設定もしっかりやった
・モデルへのリレーションの設定もやった
「アソシエーションの設定は整った」と思いきや、いざ出力してみるとNoMethodErrorが起こった。

※以下モデルとビューのソースコードの抜粋。

# モデル
@mails = mail.all
 
#ビュー
<% @mails.each do |mail| %>
  <%= mail.attachment.filename %>
<% end %>

原因は、eachでぶん回してる全てのmailオブジェクトにattachmentがついているとは限らないため。
nilになる可能性があるものは、出力する際に、条件分岐しなくてはならない。
以下のように書きなおせば、OK。ただし、nilの場合には何も出力されない。

<% @mails.each do |mail| %>
  <%= mail.attachment.filename if mail.attachment.filename.present? %>
<% end %>


※参考
Railsでの実装で気をつけたい3つの罠』http://www.katawara.com/2009/rails_trap/