2

Railsアプリでネストされたルートを設定しています

resource Country do
  resource State
  resource City
  resource User
  resource Post
end

国内で投稿したユーザーを表示したい../country/1/users

ユーザーコントローラーには次のものがあります。

def index 
  @user = User.includes(:posts, :city, :state, :country)
  @user = @users.where("states.country_id = ?", params[:country_id]) if params[:country_id]
  @active_users = @users.where('posts_count > ?', 0).ranked_scope
end

私は、取得しています:

PG::Error: ERROR:  column reference "posts_count" is ambiguous
LINE 1: ...untry_id" WHERE (states.country_id = '1') AND (posts_co...

これが理由かどうかはわかりません:

  1. User、City、State、Countryモデルに関する列がありposts_count、クエリはどちらを使用するかを認識していません。もしそうなら、テーブルを指定するための正しい構文は何ですか?
  2. 2つのwhere句を誤ってつなぎ合わせています。
  3. 他に何か....?

何か提案やアイデアをいただければ幸いです。

4

2 に答える 2

2

試す:

@active_users = @users.where('users.posts_count > ?', 0).ranked_scope
于 2012-06-01T02:33:46.707 に答える
0

OK、私は最終的にこれの底にたどり着きました。次のクエリは正しくありませんでした

@users = @users.where("states.country_id = ?", params[:country_id]) if params[:country_id]

Post は User に属し、Post には State を通じて 1 つの Country があります。USer と Country の間に一方向の直接的な関係がないため、クエリを次のように変更しました。

@users = @users.where(id: Country.find(params[:country_id]).users.uniq if params[:country_id]

(そして、すべてのモデル関係が適切に構成されていることを再確認しました)。

動作します!

ただし、エラーメッセージはこれを追跡するのにあまり役に立ちませんでした!

于 2012-06-02T06:33:46.113 に答える