2016-10-14 14 views
0

問題は、previous_modalメソッドが、@user前の写真ではなく、データベース内の前の写真を返していることです。ユーザーの前の写真を取得するにはどうすればよいですか?

たとえば、@userにIDが10,9,8,7,6,1の写真があり、写真ID 6のモーダルを開き、前のをクリックすると、hrefが1ではなく5に設定されます。あなたのprevious_modal方法で

UsersController 

def show 
    @user = User.find(params[:id]) 
    @photos = @user.photos.approved.order('created_at desc').paginate(page: params[:page], per_page: 9) 
    respond_to do |format| 
     format.html 
     format.js 
    end 
end 

users/show.html.erb 

<% @photos.in_groups_of(3, false).each do |group| %> 
    <% group.each do |photo| %> 
    ... 
    <div class="modal" id=<%="#{photo.id}"%> tabindex="-1" role="dialog"> 
    ... 
    <a class="previouslink" data-dismiss="modal" data-toggle="modal" href=<%="#"+"#{photo.previous_modal.id}"%>> 
    ... 

class Photo 

def previous_modal 
    if self.class.approved.where("id < ?", id).last == nil 
    return self 
    else 
    return self.class.approved.where("id < ?", id).last 
    end 
end 

答えて

0

私は追加することによってそれを解決:

.where("user_id" => self.user.id) into the code. 
1

、代わりにidで検索するのでは、あなたは...のcreated_atで何か検索することができます:

def previous_modal 

    if self.class.approved.where("created_at < ?", self.created_at).last == nil 
    return self 
    else 
    return self.class.approved.where("created_at < ?", self.created_at).last 
    end 
end 

そしてクリーンなコードのために、私はお勧めします:

def previous_modal 
    last_photo = self.class.approved.where("created_at < ?", self.created_at).last 
    last_photo ? last_photo : self   
end 

これは上記と同じように動作します。それが役に立てば幸い!

EDIT:

私はあなたが[10、9、8、7、6、1]配列、ということになるだろうかどうかはわかりませんが、あなたがそれをしたら、それは簡単です...あなただけに持っていました次の/前の位置のIDで写真を見つける。この場合には、photo_idsはそう、上記と同じ結果を生成した、注文されます返さ、

def previous_modal 

    photo_ids = self.user.photos.map(&id) #Get all photos ids for that user 
    self_index = photos_ids.index(self.id) #Get the index of this particular object id 
    previous_photo = Photo.find_by_id(photos_ids[self_index-1]) #Find the previous one 
    return (previous_photo || self) 
end 

しかし、私は推測する:ような何かを考えることができます。あなたは写真注文の歴史とその配列を維持する方法を把握する必要があります...幸運!

+0

をこれは私に私のコードと同じ結果を与えています。 '@ user'の前の写真ではなく、データベースの前の写真を私に渡しています。 –

+0

編集メモ、plsを見てください! –

+0

混乱して申し訳ありません。配列はありません。私はちょうどユーザーが写真をアップロードしていて、それらの写真はそのIDを持っていると言っていました。私はそれを解決したと信じています。助けてくれてありがとう、私はまだあなたの答えからいくつかを学んだ。問題の言い訳に申し訳ありません。 –

関連する問題