将sql查询转换为活动记录

时间:2013-09-04 18:51:37

标签: sql ruby-on-rails activerecord

我有以下两种型号。 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;

2 个答案:

答案 0 :(得分:0)

以下查询可能有效(未经测试)

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

您无法直接在用户上访问secondants的属性。你必须像user [“attribute_name”]

那样访问它

答案 1 :(得分: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)