url_for_file_columnをeachの中で使うには

http://d.hatena.ne.jp/kusakari/20070530が参考になる。ファイルも消してくれるのは良いね。


railsのfile_columnは便利だが一覧表示の各行で画像を表示しようとしてurl_for_file_columnを使うとエラーになる。

<% @memo.each do |memo| -%>
  <tr>
   <td><%= memo.title %></td>
    <td>
    <%if memo.image? -%>
      <img src="<%= url_for_file_column("memo", "image") %>")
    <%end-%>
    </td>
  </tr>
<% end -%>

具体的にはこんな感じ。

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.image_relative_path

他の人は悩んでないので解決策があるのはわかっていたが、2日ほどはまった。


■原因
url_for_file_columnメソッドはインスタンス変数対象じゃないと使えません。
# プラグインの公式のページの下のほうに英語で書いてあった気がする


■解決方法
繰り返し操作の冒頭でローカル変数をインスタンス変数にぶち込みましょう。
そして、そのインスタンス変数を対象にurl_for_file_columnを使ってください。

<% @memo.each do |memo| -%>
<% @memo_image=memo %>
  <tr>
   <td><%= memo.title %></td>
    <td>
    <%if memo.image? -%>
      <img src="<%= url_for_file_column("memo_image", "image") %>")
    <%end-%>
    </td>
  </tr>
<% end -%>