現在Ruby on Railsで動作するウェブサイトを作成しています。私は、私は2人の異なる属性名を持っていること、2つのテーブル料金と場所に参加しようとしたとき、私はいくつかの問題に直面しています。Ruby on Railsコントローラで異なる属性名を持つ2つの異なるテーブルを手動で結合する方法
料金:id rater_id rateable_id
(このテーブルではさらにいくつかの属性)
場所:id title body user_id
(このテーブルではさらにいくつかの属性)
ここでは、私がしようとしていますクエリですSQLで行うこと。
SELECT *
FROM rates, locations
WHERE rates.rater_id = locations.user_id AND rates.rateable_id = locations.id
私はrubyonrails.orgが提供する公式のアクティブレコードの文書を読んでいます。私はこれらをやってみましたが、うまくいきません。ここで私はapp\controllers\users_controller.rb
@join_rating = Rate.joins(:locations).where("rates.rateable_id = locations.id AND rates.rater_id = locations.id")
@all_rating = @all_rating.where(rater_id: @user)
@count_all_rating = @all_rating.count
@join_rating
に移植しようとしているコードは、異なる名前の属性に参加しようとしてされています。
@all_rating
、ユーザー
て評価された場所の総数を計算しようとしている、ユーザーIDに
@join_rating
を使用して、表示する場所フィルタリングしようとしているが、すべてが正しくセットアップされていることを仮定し、唯一のエラーは、私がしようとしているクエリにあります。ユーザーが@all_rating
を使って評価した場所を表示できるように、どのように文を書き直すべきですか?
ありがとうございました!
ありがとうございます。それは完全に動作します。あなたはwhere句でタイプミスをしました。しかし、私はそれをキャッチすることができます。 –
ありがとうございます。どんなタイプミスなのか教えてください。私は答えを更新できます。 – AmitA
'( 'rates.rater_id' => @ user.id).where(" rates.rateable_id = locations.id AND rates.rater_id = locations.user_id ")' <<< user_id –