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