0

コレクション モデルから関連するすべての写真をミニチュア ビューに表示しようとしています。

私のサンプル ミニチュアには 2 枚の写真がありますが、次のコードでは「undefined method `photo' for #」というエラーが発生します。

<% @miniature.collections(:photo).each do |photo| %>
  <%= image_tag @miniature.collections.photo.url(:medium) %>
<% end %>

Railsコンソールはそれらで正常に動作し、次のコードは最初の画像を2回表示しているため、関係はすべて正しいと思います。

<% @miniature.collections(:photo).each do |photo| %>
    <%= image_tag @miniature.collections.first.photo.url(:medium) %>
    <% end %>

同様に、最初の画像を最後に交換して、2 番目の画像を 2 回表示することもできます。私は何を間違っていますか?

4

1 に答える 1

1

each関連付けについて多くのことを知らなくても、ループでインスタンス化したインスタンス変数を使用したいと考えるのは比較的確実です。それは次のような効果があります。

<% @miniature.collections(:photo).each do |collection| %>
  <% if !collection.photo.url(:medium).nil? %>
    <%= image_tag collection.photo.url(:medium) %>
  <% end %>
<% end %>

を使用@miniature.collections.first.photo.url(:medium)すると、コレクション内の写真ごとに 1 回、コレクションの最初の画像が表示されます。おそらく、これはあなたが望むものではありません。

于 2013-10-29T14:18:57.690 に答える