我有两节课:
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>
您可以在引号内传递where表达式并绑定expires_at的值。
Customer.includes(:packages).where('packages.expires_at < ?', Date.current)
你可以这样做:
Customer.includes(:packages).where('packages.expires_at < ?', Date.current).references(:packages)
Customer.joins(:packages).where("packages.expires_at < CURRENT_DATE")
要么
Customer.includes(:packages).where("packages.expires_at < CURRENT_DATE").references(:packages)
你可以这样做:
Customer.includes([:packages]).where(["packages.expires_at < ?', Date.today]).references(:packages).order("Customers.created_at desc")