Получить родителя ActiveRecord :: Relation - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть частичное, которое прошло ассоциацию. Я хочу получить объект, который передал мне ассоциацию. Как мне это сделать? Я думал, что это будет легко, но я не могу найти метод.

Вот что я передаю частичному:

    <%= render :partial => 'shared/records_table', :locals => {:parent => @location, :records => @location.people} %>

Вот что я хотел бы перейти к частичному:

    <%= render :partial => 'shared/records_table', :locals => {:records => @location.people} %>

Есть также такие случаи:

    <%= render :partial => 'shared/records_table', :locals => {:parent => @time, :records => @time.families} %>

И

    <%= render :partial => 'shared/records_table', :locals => {:parent => @car, :records => @car.families} %>

Я не знаю класс ассоциации или родителя.

Ответы [ 3 ]

1 голос
/ 02 ноября 2018

Наткнулся на что-то похожее, и следующее сработало У ActiveRecord::Association есть метод возврата владельца.

@foo.bars.proxy_association.owner => @foo

0 голосов
/ 25 февраля 2012

Я полагаю, что в вашем классе Location у вас есть что-то вроде has_many :people, а в вашем классе Person есть что-то вроде belongs_to :location.Так почему бы просто не указать псевдоним #parent для родителя каждого класса.Ваш класс Person будет выглядеть следующим образом:

belongs_to :location
alias_method :parent, :location

Таким образом, все ваши записи будут отвечать родителю, и вам не нужно будет передавать его частичному.Вам нужно сделать что-то подобное в классе Family.

Предостережение заключается в том, что вызов parent в частичном будет загружать родителя из базы данных для каждой записи .При рендеринге вашей части вам нужно будет сделать что-то подобное, чтобы избежать этого:

render :partial => 'shared/records_table', :locals => {:records => @location.people.includes(:location)}
0 голосов
/ 24 февраля 2012

Не знаю, почему вы не хотите просто передавать эту информацию в частичное, но если в местоположении много людей, и человек принадлежит этому местоположению, то вы можете просто взять любого из людей в этом частичном домене и вызвать его, чтобы получить родителя .

edit: Добавьте метод parent в ваши модели, который возвращает соответствующую связь. Например, person.parent вернет объект Location.

Если серьезно, нет ничего плохого в том, чтобы просто передать родителя в частичное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...