可能有点奇怪。但两种模型之间的关系是可选的。用户建模has_many截止日期,但截止日期中的用户字段是可选的。如果没有填写,则截止日期是通用的,对所有用户都有效。
在确定has_many关系商店时,我不仅要在具有当前对象的user_id的截止日期模型中查找记录,而且要查找零值。
我试过了,但没用:
has_many :deadlines, -> (object){where(user: [nil, object.id])}, foreign_key:''查询始终包含原始where,并将自定义where作为AND附加,这不会导致正确的查询。
SELECT "deadlines".* FROM "deadlines" WHERE "deadlines"."user_id" = $1 AND ("deadlines"."user_id" = 1 OR "deadlines"."user_id" IS NULL) [["user_id", 1]]如何使Rails返回正确的查询:
SELECT "deadlines".* FROM "deadlines" WHERE ("deadlines"."user_id" = 1 OR "deadlines"."user_id" IS NULL)发布于 2016-11-06 13:30:55
您可以始终将普通SQL放入where子句中:
has_many :deadlines, -> (object) { where("deadlines.user_id = #{object.id} OR deadlines.user_id IS NULL") }或者,您可以在execute中使用纯正SQL。
has_many :deadlines, lambda { |object|
pg_result = ActiveRecord::Base.connection.execute("SELECT * FROM deadlines WHERE deadlines.user_id = #{object.id} OR deadlines.user_id IS NULL")
Deadline.where(id: pg_result.map { |deadline| deadline['id'] })
}https://stackoverflow.com/questions/40449741
复制相似问题