0

RoR で次の SQL クエリを作成するにはどうすればよいですか?

SQL では、次のようにします。

SELECT * FROM Gifts G
JOIN Payments P ON P.id = G.payment_id
JOIN Users    U ON U.id = P.user_id
WHERE G.type = 0

ユーザー、支払い、ギフトの 3 つのモデルがあります。

スキーマは次のようになります。

Users has many Payments
Payments has many Gifts

Users

# Table name: users
# id      :integer          not null, primary key
# name    :string

Payments

# Table name: payments
#
#  id          :integer          not null, primary key
#  user_id     :integer
#  status      :integer

Gifts

# Table name: gifts
#
#  id         :integer              not null, primary key
#  payment_id :integer
#  name       :string
#  type       :integer
4

3 に答える 3

1

モデルで has_many キーワードを使用しましたか? アクティブなレコードを使用してモデルをセットアップし、直接結合を行うことができます!

于 2013-06-18T04:25:18.757 に答える
0

あなたが試すことができます:

Gifts.find_by_sql("SELECT * FROM Gifts G
                  JOIN Payments P ON P.id = G.payment_id
                  JOIN Users    U ON U.id = P.user_id
                  WHERE G.type = 0")

そしてActiveRecordの場合、それは役に立ちます。それをチェックしてください

于 2013-06-18T04:27:39.790 に答える
0

まず、モデル間の関連付けを定義する必要があります。

ユーザー has_many :users

支払いの属している相手: ユーザーが持っている: ギフト

ギフトの所属先: 支払い

関連付けが作成されたので、AR (Active Record) を使用してデータを取得できます。レールのおかげで、熱心なロード「モデルによって返されたオブジェクトの関連レコードをロードするメカニズム」を使用できました。ここから魔法が始まります。

ユーザーが贈るすべてのものを見つける必要があると思わないようにしましょう。まず支払いに関連する必要があり、最後に彼らの贈り物にアクセスできます。これらはすべて熱心な読み込みを使用して行われます。user = User.find(1) user_gifts = user.payments.gifts

私はまだコードをテストしていませんが、これが役立つことを願っています.

于 2013-06-18T04:33:48.177 に答える