ActiveRecord查询(包括或加入)

问题描述 投票:0回答:4

我有两节课:

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>

ruby-on-rails ruby postgresql rails-activerecord
4个回答
2
投票

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

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

1
投票

你可以这样做:

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

1
投票
Customer.joins(:packages).where("packages.expires_at < CURRENT_DATE")

要么

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

0
投票

你可以这样做:

Customer.includes([:packages]).where(["packages.expires_at < ?', Date.today]).references(:packages).order("Customers.created_at desc")
© www.soinside.com 2019 - 2024. All rights reserved.