Rails GeoCoder使用ModelName修改Select子句。*

时间:2015-01-18 22:47:02

标签: ruby-on-rails rails-models

我正在使用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")

enter image description here

如何从查询中删除shift。*,我当前的技术在这里,但对我来说似乎有点狡猾,并且不允许查询保持为关系

sql = sql.gsub("shifts.*, ", "")

1 个答案:

答案 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")