【问题标题】:ActiveRecord query (includes or joins)ActiveRecord 查询(包括或连接)
【发布时间】:2019-08-04 19:46:32
【问题描述】:

我有两个班级:

class Customer 
    has_many :packages
end

class Package 
    belongs_to :customer
end

如何进行这样的查询?

Customer.includes(:packages).where(packages: 'expires_at < Date.current')

通过控制台的示例测试,我得到了它:Customer Load (26.0ms) SELECT "customers".* FROM "customers" INNER JOIN "packages" ON "packages"."customer_id" = "customers"."id" WHERE (packages.expires_at < '2019-03-13') LIMIT $1 [["LIMIT", 11]] Traceback (most recent call last): ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: operator does not exist: integer = uuid) LINE 1: ...INNER JOIN "packages" ON "packages"."customer_id" = "custome... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. : SELECT "customers".* FROM "customers" INNER JOIN "packages" ON "packages"."customer_id" = "customers"."id" WHERE (packages.expires_at < '2019-03-13') LIMIT $1 irb(main):003:0>

【问题讨论】:

  • 已解决。我的客户迁移是create_table :customers, id: :uuid do |t|,我添加了一个类型::uuid,如下:create_table :customers, id: :uuid, type: :uuid do |t|

标签: ruby-on-rails ruby postgresql rails-activerecord


【解决方案1】:

您可以这样做:

Customer.includes([:packages]).where(["packages.expires_at < ?', Date.today]).references(:packages).order("Customers.created_at desc")

【讨论】:

    【解决方案2】:
    Customer.joins(:packages).where("packages.expires_at < CURRENT_DATE")
    

    或

    Customer.includes(:packages).where("packages.expires_at < CURRENT_DATE").references(:packages)
    

    【讨论】:

    • 而不是等待您查询的代码,而是关注您在应用它们时遇到的错误@DokNabaku。
    【解决方案3】:

    你可以这样做:

    Customer.includes(:packages).where('packages.expires_at < ?', Date.current).references(:packages)
    

    【讨论】:

    • 我收到此错误 ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: operator does not exist: integer = uuid 。也许是因为我使用的是 uuid 而不是顺序 ID。
    【解决方案4】:

    您可以在引号内传递 where 表达式并绑定 expires_at 的值。

    Customer.includes(:packages).where('packages.expires_at < ?', Date.current)
    

    【讨论】:

    • 同样,我得到了这个错误 ActiveRecord::StatementInvalid (PG::UndefinedFunction: ERROR: operator does not exist: integer = uuid 。也许是因为我使用的是 uuid 而不是顺序 ids。
    • 这是一个不同的问题。你能详细说明一下吗?添加你得到的整个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多