2010-10-25 8 views
1

J'ai un modèle de pays et un modèle de lieux - un pays has_many places, et un lieu belongs_to un pays. Un modèle de lieu également has_many postes (dont belong_to une place). Je voudrais agréger tous les messages provenant d'endroits appartenant à un pays donné dans un flux - plutôt comme un flux d'activité d'un ami sur un site de réseau social. J'ai un peu de mal à trouver la bonne recherche à faire, toute aide serait grandement appréciée! En ce moment j'ai:Mise en place d'un flux avec Rails

country.rb

has_many :places 
has_many :posts, :through => :places 

def country_feed 
    Post.from_places_belonging_to(self) 
end 

post.rb

belongs_to :place 
scope :from_places_belonging_to, lambda { |country| belonging_to(country) } 

private 

    def self.belonging_to(country) 
    place_ids = %(SELECT place_id FROM places WHERE country_id = :country_id) 
    where("place_id IN (#{place_ids})", { :country_id => country }) 
    end 

end 

Ensuite, dans le dossier du pays:

<h3>Posts</h3> 

<% @country.country_feed.each do |post| %> 
    <%= link_to "#{post.user.username}", profile_path(post.user_id) %> posted on <%=link_to "#{post.place.name}", place_path(post.place_id) %> <%= time_ago_in_words post.created_at %> ago: 
    <%= simple_format post.content %> 
<% end %> 

Cela va sans aucune erreur, mais donne un flux de tous les messages, plutôt que de sélectionner les messages pour ce pays particulier. Quelle est la meilleure façon de faire fonctionner ça? Je soupçonne que je pourrais trop compliquer les choses ... merci d'avance!

Répondre

2

Il semble qu'il y ait une erreur de syntaxe dans la sous-requête. places_id n'existe pas dans le tableau places, il devrait vraiment lire:

SELECT id FROM places WHERE country_id = :country_id 

Vous penseriez la sous-requête invalide soulèverait une exception, mais il ne le fait pas - ou bien elle est gérée en silence. Très étrange.

Mais à moins que je me manque quelque chose, vous pouvez remplacer tout cela en utilisant simplement:

<% @country.posts.each do |post| %> 

Non?

+0

d'oh! wow je suis rouillée ... merci! Je suis un peu perplexe à propos de cette erreur de syntaxe maintenant vous le mentionnez ... – Budgie

Questions connexes