【问题标题】:How to set date field in join query ruby on rails如何在rails上的连接查询ruby中设置日期字段
【发布时间】:2017-08-25 16:38:27
【问题描述】:

我有以下查询,我想在其中检查日期。

实际的工作查询是这样的:

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})

但错误还是一样。

如何在这些类型的查询中设置日期?也推荐任何学习资源。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 join activerecord


    【解决方案1】:

    您可以将数组传递给.where 子句,如ActiveRecord documentation 中所述。

    如果传递一个数组,则处理数组的第一个元素 作为模板,其余元素插入到 生成条件的模板。

    另外,您可以在连接查询中使用表名。

    如果关系是连接的结果,您可以创建一个条件 它使用连接中的任何表。对于字符串和数组 条件,使用条件中的表名。

    解决办法:

    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])
    

    【讨论】:

    • treated as a template是什么意思?
    • 模板是带问号的部分。请注意,我们一开始并没有在那里提供我们的值,但我们只是指定它们将在那个特定的位置。我们的值作为数组的第二个和第三个元素提供。
    • 非常感谢您的解释。有道理:)
    【解决方案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。您可以在其中找到大量信息来执行您需要的大部分查询。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      相关资源
      最近更新 更多