我的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
答案 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 }