我有一个索引方法:
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
变量中的任何内容?
答案 0 :(得分:0)
错误表示您至少选择了两列名为id
。
ORDER BY id asc
看起来你有顺序,查询无法决定将使用哪个表列名称。
按ORDER BY id asc
更改ORDER BY your_table_name.id asc
,其中your_table_name
是您要对表格ID进行排序的表格的名称。
似乎应该更改sort_column
。