加入表格和地图显示

时间:2016-10-19 19:01:26

标签: mysql ruby-on-rails gmaps4rails

我有一个索引方法:

def index
    if params[:city] || params[:lab_type]
        @labs = Lab.in_city(params[:city]).with_type(params[:lab_type]).advanced_search(params[:search]).order(sort_column + " " + sort_direction)
    else
        @labs = Lab.advanced_search(params[:search]).order(sort_column + " " + sort_direction)
    end
    # Marker setup:
    if @places.count > 1
        @hash = Gmaps4rails.build_markers(@labs.select(:name, :latitude, :longitude)) do |lab, marker|
            marker.lat lab.latitude
            marker.lng lab.longitude
        end
    end
    # Only labs with offer_items.count > 1 if filled_params 
    @labs = @labs.joins( :offer_items ).group( 'labs.id' ).having( 'count( lab_id ) > 1' ) if params[:filled_only]
end

使用这样的代码,我可以使用" filled_only"它会产生预期的结果 - 只给我任何报价数超过0的实验室;

但是,如果我将代码joins, group, having放在Marker setup之前并将filled_only设置为true,我的数据库会收到错误消息:

ActiveRecord::StatementInvalid (PG::AmbiguousColumn: ERROR:  column reference "id" is ambiguous
LINE 1: ... BY labs.id HAVING (count( lab_id ) > 1) ORDER BY id asc

可能导致这种情况的原因是什么?来自Marker setup的代码是否会更改@places变量中的任何内容?

1 个答案:

答案 0 :(得分:0)

错误表示您至少选择了两列名为id

ORDER BY id asc

看起来你有顺序,查询无法决定将使用哪个表列名称。

ORDER BY id asc更改ORDER BY your_table_name.id asc,其中your_table_name是您要对表格ID进行排序的表格的名称。

似乎应该更改sort_column