在Rails中,有没有办法在类(不是控制器)中调用request.request_uri?

时间:2010-10-13 15:14:01

标签: ruby-on-rails google-analytics

我正在使用Google AnalyticsAPI的Garb Ruby包装为我的应用构建一个综合浏览量计数器。这样做意味着在'lib'文件夹中创建一个新模块,我在其中创建一个这样的类:

#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

我需要过滤器:page_path.eql =>成为我调用该方法的页面的路径。我尝试过像request.request_uri或url_for(:action =>'show':controllers =>'users':id => params [:id])但不知道如何指定页面路径在这个类定义中。

1 个答案:

答案 0 :(得分:1)

这将破坏MVC封装 - 我认为你应该在application_controller中创建一个before filter,它将你需要的请求数据传递给你的类。

修改

如果您想为特定页面构建一次性报告,我认为您需要执行以下操作:

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

同样,如果你在每个页面上都有这个,我认为前一个过滤器是明智的。不过,相当肯定它会让你的应用减慢很多。

This is covered in the docs.