рельсы: получить данные в связанных таблицах - PullRequest
1 голос
/ 13 апреля 2011

У меня есть 3 таблицы в моем приложении rails.- Пользователь - lnkUserPerson - Персона

Пользователь has_one Персона через lnkUserPerson & Person has_one Пользователь через lnkUserPerson.

Таблица lnkUserPerson содержит 3 поля - user_fk, которые представляют идентификатор пользователя - person_id, который представляетидентификатор этого пользователя в таблице Person - boss_id, который представляет идентификатор руководителя пользователя в таблице Person

. Для получения сведений о пользователе в таблице персон используется: @ user.lnkuserperson.person.name.

Я хотел бы знать, как получить данные о личности начальника пользователя.

Я пытался использовать:

@userBoss = Person.find(:first, :conditions => ["id = ?", @user.lnkuserperson.boss_id])

, но когда пытаюсь позвонитьэто, на мой взгляд, выдает ошибку.

Я хочу знать, чтобы получить информацию о боссе из таблицы Person с помощью объекта @user.


Модель пользователя:

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"

Таким образом, чтобы получить сведения о боссе (например, ниже я получаю имя)пользователь,я просто звоню:

@user.lnkuserperson.boss.name

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Вы должны быть в состоянии сделать это с помощью следующих средств в 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

Вы можете сделать это из вашей модели Person:

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

Это дает вам улучшенный вызов метода: @ user.lnkuserperson.name

0 голосов
/ 18 июня 2012

попробуйте метод сбора для связанного объекта http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

 @author.authorships.collect { |a| a.book }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...