【问题标题】:Joining table and map displays连接表格和地图显示
【发布时间】:2016-10-19 19:01:25
【问题描述】:

我有一个索引方法:

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

使用这样的代码,我可以使用“fill_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 变量中的任何内容?

【问题讨论】:

    标签: mysql ruby-on-rails gmaps4rails


    【解决方案1】:

    错误表明您至少选择了两个列名称id

    ORDER BY id asc

    看起来您有 order by,并且查询无法决定将使用哪个表列名称 id。

    ORDER BY id asc 更改为ORDER BY your_table_name.id asc,其中your_table_name 是您要根据哪个表ID 排序的表的名称。

    似乎应该更改sort_column

    【讨论】:

    • 我从lab_instance.class.table_name 获得了table_name,并将其添加到名为sort_column 的方法中,即:Lab.column_names.include?(params[:sort]) ? params[:sort] : "labs.id",我得到的是TypeError (no implicit conversion of Fixnum into Hash)
    • 我看到了问题。在调用@labs.count 时,在所有连接等方法之后,它返回一个哈希而不是一个数字
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2019-12-31
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多