0

以下の2つのモデルがあります。Secondant は、ユーザーが別のユーザーのために果たすことができる役割でありsecondant_iduser.id. 私が望むのは、 が二次current_user的役割を果たしているユーザーを持つことです。SQL でクエリを記述できますが、それをアクティブなレコードに変換する最良の方法は何でしょうか?

class Secondant < ActiveRecord::Base

  belongs_to :user
  before_save :find_user
end

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  has_many :secondants
end

必要な結果が得られ、アクティブなレコードに変換したいクエリは次のとおりです。

select
    *
from
    users,
    secondants
where
    users.id = secondants.secondant_id and
    secondant_id = 2;
4

2 に答える 2

0

ユーザー モデル内でスコープを定義します。

class User < ActiveRecord::Base    
  ....
  scope :playing_as_secondant,(lambda do |user_id| 
             joins(JOIN secondants on users.id = secondants.secondant_id).where("secondants.secondant_id=?", user_id)
           end)    
  ....
end

次に、 current_user が次のような役割を果たしているすべてのユーザーを見つけたいときはいつでも呼び出します。

User.playing_as_secondant(current_user.id)
于 2013-09-04T19:27:57.030 に答える
0

以下のクエリが機能する可能性があります(テストされていません)

User.select("users.*, secondants.*").joins("JOIN secondants on users.id = secondants.secondant_id").where("secondants.secondant_id = ?", 2)

ユーザーの二次属性から属性に直接アクセスすることはできません。user["attribute_name"] のようにアクセスする必要があります

于 2013-09-04T19:12:23.773 に答える