0

私は RoR 3 の初心者で、問題が発生しています。User私はこのようなクラスを持っています

class User < ActiveRecord::Base
  attr_accessible :firstname, :lastname, :login, :password, :rank, :sa_id, 
  belongs_to :role
  belongs_to :company
end

コントローラーで最初のユーザーを取得すると(たとえば)、User.firstアクセスできますUser.first.role

属しているオブジェクトを含むすべてのユーザーを取得することは可能ですか? 結果はすべてのユーザーになり、各ユーザーには役割タイプのオブジェクトと会社タイプのオブジェクトが含まれますか?

ありがとう

4

2 に答える 2

3

これがあなたが探しているものかどうかはわかりませんが、アソシエーションを熱心に読み込むことができるので、1 つのリクエストのみがデータベースに送信されます (実際には 3 つ、ユーザー用、ロール用、および会社用)。

>> users = User.includes(:role, :company)
>> users.each do |user|
     puts user.role
     puts user.company
   end

更新: json をレンダリングするには、使用します

respond_with(@user) do |format|
  format.json { render json: @user.to_json(methods: [:company, :role] }
end
于 2013-02-28T12:35:32.590 に答える
0

indexスキャフォールディングを使用した場合は、 UsersController 内に生成されたメソッドもあるはずです。

そこには、次のようなものが表示されます。

@users = User.all

これにより、データベースからすべてのユーザー オブジェクトが取得されます。

これらのユーザーを反復処理して、以前と同じようにroleフィールドにアクセスできるようになりました。

ただし: これは遅延読み込みを使用します。手段: アクセスされるたびにrole、個別のクエリが実行されます。これを修正するには、「eager loading」を使用します ( http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations ):

@users = User.includes(:role)

これにより、関連付けられたロールを持つすべてのユーザーが 1 つのクエリで取得されます

于 2013-02-28T12:38:35.490 に答える