Domanda

Sto avendo difficoltà a capire come creare le seguenti associazioni:

  • L'utente ha molti album di foto
  • Photo Album ha molte foto
  • Gli utenti possono seguire qualcun altro specifico album di foto (e, indirettamente, finiscono dopo il proprietario del album fotografico) e hanno le foto mostrano in un tipo di scenario "news feed", quindi ci deve essere un qualche tipo di rapporto che si instaura tra li

Ecco le associazioni che ho:

class User < ActiveRecord::Base
  has_many :photo_albums
  has_many :photos
  has_many :relationships, :foreign_key => "follower_id", 
                           :dependent => :destroy
  has_many :reverse_relationships, :foreign_key => "followed_id", 
                                   :class_name => "Relationship", 
                                   :dependent => :destroy
  has_many :followings, :through => :relationships, :source => :followed
  has_many :followers, :through => :reverse_relationships, :source => :follower
end

class PhotoAlbum < ActiveRecord::Base
  belongs_to :user
  has_many :photos
end

class Photo < ActiveRecord::Base
  belongs_to :user
  belongs_to :photo_album
end

class Relationship < ActiveRecord::Base
  belongs_to :follower, :foreign_key => "follower_id", :class_name => "User"
  belongs_to :followed, :foreign_key => "followed_id", :class_name => "User"
end

Come posso fare a dove posso solo ottenere tutte le immagini degli album di foto che l'utente sta ancora seguendo?

Esempio:

  • Jane ha 2 album fotografici "di Jane pubblica Stuff" e "di Jane privato Stuff" con le foto di ognuno di loro.
  • Bob segue solo "di Jane pubblica Stuff" così come posso tornare le foto da solo album di foto tramite le associazioni di ActiveRecord?

Qualcosa di simile bob.followings.photos che restituisce foto da solo gli album fotografici che Bob seguendo ... o anche bob.followings.photo_albums per ottenere una raccolta di tutti gli album fotografici che Bob sta seguendo

So che probabilmente c'è una lunga strada da fare questo, ma c'è un modo più semplice utilizzando le associazioni di ActiveRecord?

Grazie per qualsiasi consiglio o di orientamento è possibile fornire! I really appreciate it!

È stato utile?

Soluzione

Il modo in cui lo avete configurato, seguito associa un utente a un altro, non è un utente a un PhotoAlbum, che è ciò che si descrive. Sembra come se si desidera

class Relationship < ActiveRecord::Base
  belongs_to :follower, :foreign_key => "follower_id", :class_name => "User"
  belongs_to :followed, :foreign_key => "photo_album_id", :class_name => "PhotoAlbum"
end

Con il fatto che, una leggera modifica della risposta di davidb dovrebbe darvi ciò che si vuole:

def followings_photos
      Photo.where(:photo_album_id => self.followings.collect(&:id))
end

Altri suggerimenti

Si consiglia di guardare il gioiello amistad a https://github.com/raw1z/amistad, che ti dà gli amici e amicizie funzionalità. Nel tuo caso, un amico potrebbe essere un seguace.

Poi si può fare qualcosa di simile user.friends.each do |f| per recuperare tutti i seguaci di user e poi f.photos per ottenere tutte le immagini da ogni seguace.

provare questo nel modello User:

def followings_photos
      Photo.where(:user_id => self.followings.collect(&:id))
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top