2016-04-03 14 views
1

私はキャリアウェーブを使って写真を自分のアプリにアップロードしています。写真にはそれぞれの場所と 'belongs_to'の関係があり、場所は写真と 'has_many'の関係にあります。私のショーページには、場所の写真がアップロードされていて、通常のようにループで表示されます。しかし、私のインデックスページで私は自分の場所をループし、その場所の写真を表示したい。写真は正しいlocation_idを持っていますが、その場所の写真にアクセスするためのビューの構文についてはわかりません。私がしたいのは、@photo(location.id.last)のような特定の場所に関連する写真の1つを表示することです。どんな助けも大歓迎です、事前に感謝します。ビュー内のインスタンス変数idにアクセスする方法

ビュー

<div class="row"> 
    <!-- featured listings gallery --> 
    <% @locations.each do |location| %> 
    <% if location.featured == "true" %> 
     <div class="col-md-4 col-xs-6"> 
     <div class="thumbnail"> 
      <div class="overlay"> 
      <%= image_tag @photos, :size => '400x300', :class => 'img-responsive' %> 
      <div class="effect"> 
       <div class="overlay-header"> 
       <%= location.name %> 
       </div> 
       <div class="location-link"> 
       <%= link_to "View Building", location_path(location) %> 
       </div> 
      </div> 
      </div> 
      <h3 class="display-box-caption"> 
      <%= truncate(location.description, length: 100) %><%= link_to 'More', location_path(location), :class => 'more-info' %> 
      </h3> 
     </div> 
     <div class="col-md-12 property-link-container"> 
      <%= link_to "View Building", location_path(location), :class=>"property-link" %> 
     </div> 
     </div> 
    <% end %> 
    <% end %> 
</div> 

コントローラ

class PagesController < ApplicationController 
def index 
    @locations = Location.all 
    @photos = Photo.all 
end 
def about 

end 
def faqs 

end 
def blog 

end 
def whats_included 

end 

終了協会の助けを借りて、写真にアクセス

+0

「<%= location.photos.last.id%>」(これはあなたに最後の写真のIDを与えます)と、<%= locationあなたが既に関連付けを定義しているので、 '.photos.last%>'(それはあなたに写真オブジェクト自体を与えます)。 – sahil

答えて

2

location.photos.last.photo.url 

HTML

<div class="row"> 
    <!-- featured listings gallery --> 
    <% @locations.each do |location| %> 
    <% if location.featured == "true" %> 
     <div class="col-md-4 col-xs-6"> 
     <div class="thumbnail"> 
      <div class="overlay"> 
      <!-- changing @photos to location.photos.last --> 
      <% if location.photos.any? and location.photos.photo.present? %> 
       <%= image_tag location.photos.last.photo.url, :size => '400x300', :class => 'img-responsive' %> 
      <% end %> 
      <div class="effect"> 
       <div class="overlay-header"> 
       <%= location.name %> 
       </div> 
       <div class="location-link"> 
       <%= link_to "View Building", location_path(location) %> 
       </div> 
      </div> 
      </div> 
      <h3 class="display-box-caption"> 
      <%= truncate(location.description, length: 100) %><%= link_to 'More', location_path(location), :class => 'more-info' %> 
      </h3> 
     </div> 
     <div class="col-md-12 property-link-container"> 
      <%= link_to "View Building", location_path(location), :class=>"property-link" %> 
     </div> 
     </div> 
    <% end %> 
    <% end %> 
</div> 

コントローラー:

def index 
    @locations = Location.all 
    # no need to fetch photos now 
    # @photos = Photo.all 
end 

写真モデル

class Photo < ActiveRecord::Base 
belongs_to :location 
mount_uploader :photo, PhotoUploader 
end 
+0

この継ぎ目は閉じて、画像のメモリ位置<画像:0xb542a288>と画像アイコンを与えます。 – halfacreyum

+0

'location.photos.last'に' .url'を呼び出すことができるので、 'location.photos.last.url'のようになります。あなたの質問に 'photo.rb'モデルコードを投稿することはできますか? – sahil

+0

location.photos.last.url ....これはエラーを投げた。 – halfacreyum

1

私はサヒールの投稿が助け参照してください。 .includes(:photos)を追加すると、クエリを高速に読み込むことができます。将来的には、非常に便利です。

def index 
    @locations = Location.includes(:photos).all 
end 
+0

はい、これはクエリを高速化するのに適しています。私は場所が多くの写真を持っているので、 ':photo'ではなく':photo'であるべきだと思います。オハイオ州はちょうど注意する。 – sahil

+0

。 – 7urkm3n

関連する問題