查询返回ActiveRecord :: Relation,而不是实际数据

时间:2012-12-23 09:14:26

标签: ruby-on-rails activerecord

所以,我对编程很新,但是已经爱上了rails而不是其他应用程序,但我已经尝试过导航Railscasts,rubyonrails.org和其他几个地方,但我真的迷路了。

在控制器“weekly_review_controller.rb”中,我有:

def show
  @weeklyReviewData = []
  currentBusinessEmployees = current_user.thisUsersBusiness.employees.uniq
  @weekStart = "Sun, 2 Dec 2012 00:00 -0500".to_datetime
  @weekEnd = @weekStart+7.days-1.second
  currentBusinessEmployees.each do |t|
    # Vars
    @employeeWeeklyData = []
    # Names
    @employeeWeeklyData << t.firstName + " " + t.lastName
    # DailyData
    dStop = t.dailyData.select("deliveryStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd )
    dPkg = t.dailyData.select("deliveryPackage").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd )
    pStop = t.dailyData.select("pickupStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd )
    pPkg = t.dailyData.select("pickupPackage").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd )
    iLS = t.dailyData.select("inboundLocalService").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd )
    @employeeWeeklyData << dStop << dPkg << pStop << pPkg << iLS
    @weeklyReviewData << @employeeWeeklyData
  end

  respond_to do |format|
    format.html # index.html.haml
    format.json { render json: @weeklyReviewData }
  end
end

所以我还没想出将url作为param传递(因此开始日期和结束日期的静态定义,即使我确实传递了UTC时间码的URL“{{ 1}}“),但是当我学到更多东西时,那将会到来。我正在关注的是,因为我有一个非常漂亮的视图,(问及我将发布),我想填充我在视图中制作的表格,以及我收集的数据。问题是传递给视图的变量/weekly_review/2012-12-02%2013:00:00%20UTC正在填充员工姓名(@weeklyReviewData),但其余数据都是t.firstName + " " + t.lastName混乱的。我已经观看/阅读,并且我非常确定这个目的是在缓存中存储一​​些数据,这些数据由Active:Relation:构成数据库(或者人们似乎将其引用到那里),但是是另一天。我只想要数据库中的数据就像名字一样。

以下我的查询有什么问题?:

lazy lookups

试验/注释:

我甚至在rails控制台中使用了查询并完成了 dStop = t.dailyData.select("deliveryStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ) dPkg = t.dailyData.select("deliveryPackage").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ) pStop = t.dailyData.select("pickupStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ) pPkg = t.dailyData.select("pickupPackage").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ) iLS = t.dailyData.select("inboundLocalService").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ) ,并且SQL查询似乎非常合法,但显然我遗漏了一些东西。

SQL puts是:puts t.dailyData.select("deliveryStop").where( "startTime > ? AND endTime < ?", "Sun, 2 Dec 2012 00:00 -0500".to_datetime, "Sat, 9 Dec 2012 11:59 -0500".to_datetime ).to_sql

2 个答案:

答案 0 :(得分:1)

尝试明确告诉ActiveRecord获取一条记录:

dStop = t.dailyData.select("deliveryStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ).first

答案 1 :(得分:1)

很有可能,您想要/需要的所有数据都出现在ActiveRecord::Relation中。 ActiveRecord::Relation可以(大部分)被视为一个数组,因此您可以迭代它以获取数据。如果您愿意,可以使用to_a方法将其显式转换为数组。如果你只想要一场比赛,Tudo Constantin的回答很有用。