我正在使用GeoCoder进行基于位置的查询。 GeoCoder的.Near方法增加了一个距离&承担select子句的列,这对where和order子句很有用。
这些列很好,但它也添加了当前模型。*我试图避免使用select语句中的特定列列表。
下面的查询和图片显示了额外的添加,红色是我想删除的,黄色是由GeoCoder添加的,但我很好。
sql = Shift.scoped
.select("CAST('#{region.name}' AS character(50)) as region, staffrooms.name as staffroom_name, staffrooms.staffroom_type, shifts.id, shifts.title, shifts.shift_type, shifts.status, shifts.location, shifts.uuid")
.visible
.jobs
.joins(:posted_shortlists)
.near([region.latitude, region.longitude], 50)
sql = sql.where("staffrooms.staffroom_type = ?", staffroom_type) if staffroom_type
sql = sql.reorder("staffrooms.name")
如何从查询中删除shift。*,我当前的技术在这里,但对我来说似乎有点狡猾,并且不允许查询保持为关系
sql = sql.gsub("shifts.*, ", "")
答案 0 :(得分:0)
我找到了答案here
我的解决方法是使用以下内容在.Near方法之后随时清除选择并重置它:
.except(:select)
.select("CAST('#{region.name}' AS character(50)) as region, CAST('#{region.id}' AS Integer) as region_id, staffrooms.id as staffroom_id, staffrooms.name as staffroom_name, staffrooms.staffroom_type, shifts.id, shifts.title, shifts.shift_type, shifts.status, shifts.location, shifts.uuid, shifts.comments")
完整示例
sql = Shift.scoped
.visible
.jobs
.joins(:posted_shortlists)
.near([region.latitude, region.longitude], 50)
.except(:select)
.select("CAST('#{region.name}' AS character(50)) as region, CAST('#{region.id}' AS Integer) as region_id, staffrooms.id as staffroom_id, staffrooms.name as staffroom_name, staffrooms.staffroom_type, shifts.id, shifts.title, shifts.shift_type, shifts.status, shifts.location, shifts.uuid, shifts.comments")