0

だから、私はプログラミングにかなり慣れていませんが、他のアプリケーションよりもレールに夢中になりました.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ません (したがって、URL に UTC タイムコード " /weekly_review/2012-12-02%2013:00:00%20UTC" が渡されているにもかかわらず、開始日と終了日の静的な定義が必要です)。もう少し勉強してください。私が注目しているのは、非常に美しいビューを持っているので (質問して投稿します)、ビューで作成したテーブルに、収集したデータを入力したいと考えています。問題は、ビューに渡される変数が@weeklyReviewData従業員名 ( t.firstName + " " + t.lastName) を正常に入力しているのに、残りのデータがすべてActive:Relation:ごちゃごちゃしていることです。私は見たり読んだりしましたが、これの目的は、データベースからのデータの一部をキャッシュに保存することであると確信しています。lazy lookups(または、人々がそれを参照しているように見える)が、それもまた別の日に。名前と同じように、データベースからのデータが必要です。

では、以下のクエリの何が問題になっていますか?:

  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 )

トライアル/メモ:

Railsコンソールでクエリを使用して完了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しました.SQLクエリはかなり正当なようですが、明らかに何かが欠けています.

SQL put は次のとおりです。SELECT deliveryStop FROM "daily_data" INNER JOIN "daily_data_employees" ON "daily_data"."id" = "daily_data_employees"."dailyDatum_id" WHERE "daily_data_employees"."employee_id" = 2 AND (startTime > '2012-12-02 05:00:00' AND endTime < '2012-12-09 16:59:00')

4

2 に答える 2

1

ActiveRecord1 つのレコードを取得するように明示的に指示してみてください。

dStop = t.dailyData.select("deliveryStop").where( "startTime > ? AND endTime < ?", @weekStart, @weekEnd ).first
于 2012-12-23T09:23:11.630 に答える
1

おそらく、必要な/必要なすべてのデータはActiveRecord::Relation. AnActiveRecord::Relationは (ほとんどの場合) 配列として扱うことができるので、それを繰り返し処理してデータを取得できます。必要に応じて、メソッドを使用して明示的に配列に変換できますto_a。試合が 1 回しかないと予想される場合は、Tudo Constantin の回答が役に立ちます。

于 2012-12-23T09:29:40.177 に答える