0

我有下面的两个模型。Secondant 是一个用户可以为另一个用户扮演的角色,secondant_id它指向一个user.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 回答