2010-10-13 13 views
0

Je construis un compteur de pages vues pour mon application en utilisant le wrapper Garb Ruby pour l'API Google Analytics. Faire signifie donc la création d'un nouveau module dans le dossier « lib », dans lequel je crée une classe comme ceci:Dans Rails, existe-t-il un moyen d'appeler request.request_uri dans une classe (pas un contrôleur)?

#lib/Analyze.rb 

... 
class Report 
    extend Garb::Resource 
    metrics :pageviews 
    dimensions :page_path 
    filters :page_path.eql => '/' #the path of the page I instantiate this class on 
end 

#followed by a method for instantiating this class 

J'ai besoin de filtres: page_path.eql => pour être le chemin de la page dans laquelle j'appelle la méthode. J'ai essayé des choses comme request.request_uri ou url_for (: action => 'show': controllers => 'users': id => params [: id]) mais je ne sais pas comment spécifier le chemin de la page dans cette classe définition.

Répondre

1

Cela va casser l'encapsulation MVC - I pense vous devriez créer un filtre avant dans votre application_controller qui transmet les données de demande dont vous avez besoin à votre classe.

EDIT

Si vous voulez construire un rapport unique pour une page particulière, je pense que vous aurez besoin de faire quelque chose comme ceci:

profile = Garb::Profile.first('UA-XXXX-XX') 

report = Garb::Report.new(profile) 
report.metrics :pageviews 
report.dimensions :page_path 
report.filters :page_path.eql => request.request_uri 

report.results 

Encore une fois, si vous re ayant ceci sur chaque page, un filtre avant serait sage, je pense. Bien sûr que ça va ralentir beaucoup votre application.

This is covered in the docs.

+0

Que fait passer les données de demande de retour à l'apparence de classe comme? Je sais que je ne peux pas simplement passer une variable dans la définition de classe. Désolé, encore un programmeur assez nouveau. – kateray

+0

Je pense que vous voulez construire un rapport unique pour chaque page - J'ai mis à jour ma réponse – Codebeef

+0

D'accord, cela fonctionne pour moi mais le rend aussi plus lent. Si vous trouvez d'autres façons de le faire, aimez savoir. Merci. – kateray