2011-03-24 2 views
0

Je dois compter le nombre de vues d'un actif, cet actif étant intégré dans plusieurs blogs, chaque blog générant plusieurs vues pour cet actif.Joint les associations dans Rails 3

UML diagram

J'utilise Rails 3 et je me attendais à ce qui suit pour travailler:

class Asset < ActiveRecord::Base 
    has_many :embeds 
end 

class Embed < ActiveRecord::Base 
    belongs_to :asset 
    has_many :views 
end 

class View < ActiveRecord::Base 
    belongs_to :embed 
end 

class Assets < ApplicationController 
    def show 
    asset = Asset.find_by_id(params[:id]) 
    @views = asset.embeds.views.count 
    end 
end 

Bien sûr, il ne fonctionne pas comme prévu. Pourquoi donc?

Et quelle serait la meilleure approche? (Jointures, comprend, SQL ... cru)

Répondre

1

Tout ce que vous avez besoin est un has_many: par

class Asset < ActiveRecord::Base 
    has_many :embeds 
    has_many :views, :through => :embeds 
end 

Ensuite, vous faites ceci:

@views = asset.views.size 
+0

Ca y est! Cela fonctionne plutôt bien avec cette solution. –