0

私は Rails を初めて使用し、さまざまな本やチュートリアルに取り組んできました。以下のモデルとスキーマを使用した単純な (っぽい) セットアップがあります。ユーザーの詳細と usergroup_membership ID を取得しようとしています。達成したいことのためにモデルを正しくセットアップしたと思います(関係は表示どおりで、ユーザーはusergroup_membershipsを介してグループに属しています-空想は何もありません)。「rails db」を使用すると、生の SQL を使用して必要なレコードセットを取得できますが、Rails の方法でそれを行う方法がわかりません。

私の基礎クラス

Class User
has_many :usergroup_memberships
has_many :usergroups, :through => :usergroup_memberships

Class Usergroup
has_many :usergroup_memberships, :dependent => :destroy
has_many :users, :through => :usergroup_memberships

Class UsergroupMembership
belongs_to :usergroup
belongs_to :user

動作するSQL

SELECT users.*, usergroup_memberships.id 
FROM users
LEFT JOIN usergroup_memberships ON usergroup_memberships.user_id = users.id 
WHERE usergroup_memberships.usergroup_id = 1;

上記の SQL は問題なく、結合された usergroup_memberships.id が最後にタグ付けされたレコードセットを返します。Rails 経由でこれにアプローチする方法についてのヘルプやドキュメントは大歓迎です。

4

2 に答える 2

1

このような実験は、いわゆるrails consoleで行うことができます。

apps ディレクトリにいる場合は、次のコマンドで Rails コンソールを起動できます。

rails c

プロンプトを待ちます!まず、ユーザーを取得する必要があります。

u = User.first

次に、ユーザーグループを非常に簡単に取得できます。

g = u.usergroups

このようなことをテストするために、常にコンソールにいることに気付くでしょう。これは、アプリケーションで使用できます。たとえば、最初のユーザーのユーザーグループを取得します。

User.first.usergoups

ただし、gem: pryをお勧めします。この gem を使用する ( Gemfile に入れるだけ) ことで、デバッグ目的でアプリケーション内にブレークポイントを作成できます。これにより、Rails コンソールが生成されます。たとえば、コントローラーメソッドでは、次のように言うことができます:

binding.pry

この行が実行されると、Rails サーバーはデバッグ モードに切り替わり、ブレーク ポイントで停止し、そのスコープで定義されているすべての変数とメソッドを表示できます。

于 2012-12-19T20:35:05.417 に答える
0

私にとってうまくいくものを見つけました:

@blah = Usergroup.find(groupID).usergroup_memberships.includes(:user)

次に、ユーザーの詳細にアクセスするには:

@blah[i].user.email

(そしてコメントをありがとう - @Baldrick - 私のモデルは少し壊れている/型にはまらないと思います。次のプロジェクトのために覚えておくべきことです)。

于 2012-12-20T11:56:12.163 に答える