rails:检索关联表中的数据

时间:2011-04-13 16:38:08

标签: ruby-on-rails

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

用户has_one通过lnkUserPerson& Person has_one用户通过lnkUserPerson。

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

要在人员表中检索用户的详细信息,请使用:@ 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

lnkuserperson模特:

belongs_to :user
belongs_to :person, :class_name => "Person", :foreign_key => "person_id"
belongs_to :boss, :class_name => "Person", :foreign_key => "boss_id"

因此,为了检索用户的老板详细信息(例如下面的检索名称),我只需要打电话:

@user.lnkuserperson.boss.name

2 个答案:

答案 0 :(得分:2)

你应该可以通过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) }

在app / 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

您可以从Person模型中执行此操作:

 #app/models/person.rb
 delegate :name, :to => :lnk_user_person

这为您提供了一个改进的方法调用:      @ user.lnkuserperson.name

答案 1 :(得分:0)

尝试关联对象的collect方法 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

 @author.authorships.collect { |a| a.book }