Ruby on rails rails:检索关联表中的数据

Ruby on rails rails:检索关联表中的数据,ruby-on-rails,Ruby On Rails,我的rails应用程序中有3个表。 -使用者 -lnkUserPerson -人 用户通过lnkUserPerson拥有一个用户&用户通过lnkUserPerson拥有一个用户 lnkUserPerson表包含3个字段 -user_fk,表示用户的id -person_id,表示person表中该用户的id -boss_id,表示Person表中用户老板的id 要在person表中检索用户的详细信息,请使用:@user.lnkuserperson.person.name 我想知道如何检索用户老板

我的rails应用程序中有3个表。 -使用者 -lnkUserPerson -人

用户通过lnkUserPerson拥有一个用户&用户通过lnkUserPerson拥有一个用户

lnkUserPerson表包含3个字段 -user_fk,表示用户的id -person_id,表示person表中该用户的id -boss_id,表示Person表中用户老板的id

要在person表中检索用户的详细信息,请使用:@user.lnkuserperson.person.name

我想知道如何检索用户老板的个人详细信息

我尝试使用:

@userBoss = Person.find(:first, :conditions => ["id = ?", @user.lnkuserperson.boss_id])
但在我看来,当我试图把它称为一个错误时

我想知道如何使用@user对象从Person表中检索boss详细信息


用户模型:

has_one :lnkuserperson
has_one :person, :through => :lnkuserperson, :source=>:person
has_one :boss, :through => :lnkuserperson, :source=>:boss
人物模型:

has_one :lnkuserperson
has_one :user, :through => :lnkuserperson
belongs_to :user
belongs_to :person, :class_name => "Person", :foreign_key => "person_id"
belongs_to :boss, :class_name => "Person", :foreign_key => "boss_id"
 #app/models/person.rb
 delegate :name, :to => :lnk_user_person
lnkuserperson模型:

has_one :lnkuserperson
has_one :user, :through => :lnkuserperson
belongs_to :user
belongs_to :person, :class_name => "Person", :foreign_key => "person_id"
belongs_to :boss, :class_name => "Person", :foreign_key => "boss_id"
 #app/models/person.rb
 delegate :name, :to => :lnk_user_person
因此,要检索用户的boss详细信息(例如,在下面的示例中,我正在检索名称),我只需调用:

@user.lnkuserperson.boss.name

在Rails3中,您应该能够通过以下方式完成此操作(我假设这是Rails3,因为它是以这种方式标记的):

在app/models/user.rb中:

# app/models/user.rb

#scope for pulling a specific user via Boss ID
scope :by_boss, lambda { |boss_id| where("id = ?", boss_id) }
应用程序内/models/person.rb

#app/models/person.rb

#scope for finding a person by Boss ID
scope :boss, lamba { |boss_id| joins(:users) & User.by_boss(boss_id) }
在控制器中:

def show
 @boss = Person.boss(@users.lnkuserperson.boss_id)
end
作为旁白,不要这样做:

 @user.lnkuserperson.person.name
您可以从个人模型中执行此操作:

has_one :lnkuserperson
has_one :user, :through => :lnkuserperson
belongs_to :user
belongs_to :person, :class_name => "Person", :foreign_key => "person_id"
belongs_to :boss, :class_name => "Person", :foreign_key => "boss_id"
 #app/models/person.rb
 delegate :name, :to => :lnk_user_person
这为您提供了一个改进的方法调用:
@user.lnkuserperson.name

尝试关联对象的collect方法


对不起,标签搞错了。我使用的是rails 2.3.5。不过,我会尝试在我的应用程序中实现这一点。非常感谢您的建议,Rails 2.3.X可能需要做一些更改。最具体地说,Person模型中的命名范围不起作用。我发现另一种方法是在我的用户模型中使用:source属性。在下面找到我的解决方案:)