2017-03-31 22 views
1

以下のクエリで日付をチェックしたいのですが。ジョインクエリで日付フィールドを設定する方法ruby on rails

Quiz.joins(lesson_plan: [private_class: [private_school: 
:joined_private_schools]]).where(joined_private_schools: {user_id: 73}, 
lesson_plans: {is_publish: true}) 

しかし、私は日付フィールドを設定しようとすると、それは言う::

実際の作業クエリは次のようである

クエリ:

Quiz.joins(lesson_plan: [private_class: [private_school: 
:joined_private_schools]]).where(joined_private_schools: {user_id: 73}, 
lesson_plans: {"is_publish = ?, available_due_date_time > ?", true, 
Time.zone.now}) 

エラー:

SyntaxError: (irb):82: syntax error, unexpected ',', expecting => 
available_due_date_time > ?", true, Time.zone.now}) 
          ^
(irb):82: Can't assign to true 
able_due_date_time > ?", true, Time.zone.now}) 
          ^
(irb):82: syntax error, unexpected '}', expecting &. or :: or '[' or '.' 
ime > ?", true, Time.zone.now}) 
          ^

更新:

は、私が試した:

クエリ:

Quiz.joins(lesson_plan: [private_class: [private_school: 
:joined_private_schools]]).where(joined_private_schools: {user_id: 73}, 
lesson_plans: {"is_publish = ? AND available_due_date_time > ?", true, 
Time.zone.now}) 

しかし、まだエラーが同じです。

これらのタイプのクエリで日付を設定するにはどうすればよいですか?学習のためのあらゆるソースも推奨されます。

答えて

2

.where句には、ActiveRecord documentationのように配列を渡すことができます。

If an array is passed, then the first element of the array is treated as a template, and the remaining elements are inserted into the template to generate the condition.

さらに、結合されたクエリでテーブル名を使用できます。

If the relation is the result of a join, you may create a condition which uses any of the tables in the join. For string and array conditions, use the table name in the condition.

ソリューション:

Quiz.joins(lesson_plan: [private_class: [private_school: :joined_private_schools]]) 
    .where(joined_private_schools: { user_id: 73 }) 
    .where(["lesson_plans.is_publish = ? AND lesson_plans.available_due_date_time > ?", true, Time.zone.now]) 
+0

'template'として扱わの意味は何ですか? – LearningROR

+1

テンプレートは疑問符の付いた部分です。最初は値を提供していないことに注意してください。しかし、その特定の場所にあることを指定するだけです。値は配列の2番目と3番目の要素として提供されます。 –

+0

ありがとうございました。理にかなっている:) – LearningROR

2

これを試してみてください:

.where(joined_private_schools: {user_id: 73}).where('lesson_plans.is_publish = ? AND lesson_plans.available_due_date_time > ?', true, Time.zone.now) 

編集

また、Active Record Query Interfaceを確認してください。必要なほとんどのクエリを実行するための多くの情報があります。

関連する問題