2016-10-19 8 views
0

が表示されます。私は「filled_only」を使用することができ、このようなコードで参加テーブルやマップ、私はインデックスメソッド持って

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 

をし、予想通り、それは結果を生成する - 私のすべてのプランを持っている唯一のラボを与える0以上を数えます;これを引き起こしている可能性があります

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 setupjoins, group, havingにコードを配置し、truefilled_onlyを設定している場合

は、しかし、私は言って、私のデータベースからのエラーを取得しますか? Marker setupのコードは、私の@places変数の中の何かを変更しますか?

答えて

0

エラーは、少なくとも2つのカラム名idを選択したことを示しています。

ORDER BY id asc

あなたがによって、クエリが列名のIDが使用されるテーブルを決めることができないために持っているように見えます。

変更ORDER BY id ascORDER BY your_table_name.id ascここで、your_table_nameは、並べ替えるテーブルIDのテーブルの名前です。

sort_columnのように見えます。

+0

'lab_instance.class.table_name'からtable_nameを取得し、' sort_column'というメソッドに追加しました。 'Lab.column_names.include?(params [:sort])? params [:sort]: "labs.id" 'と私が得るのは' TypeError(暗黙的にFixnumをHashに変換しない) ' – Ancinek

+0

です。 '@ labs.count'を呼び出すときにすべての結合などのメソッドを実行した後、数値のハッシュ値を返します – Ancinek

関連する問題