2012-02-24 3 views
2

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

Вот что я перехожу к парциальному:

<%= 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} %> 

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

+0

где код –

+0

с указанием частичного кода. Я хочу использовать записи, чтобы получить @location – Wilhelm

ответ

0

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

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

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

+0

Спасибо за ответ. Я добавил еще один пример, чтобы показать, почему это не сработает. Я не знаю тип ассоциации или родителя. – Wilhelm

+0

Почему вы против передачи родителя частичным? – James

+0

Просто кажется излишним и излишним. Я собираюсь использовать это частичное много и предпочел бы не передавать его. – Wilhelm

0

Я бы предположил, что в вашем классе местоположения у вас есть что-то вроде 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

Спасибо за ответ. К сожалению, это тоже не работает. Проблема в том, что все эти модели взаимосвязаны. Есть несколько родителей. Я действительно ищу владельца ассоциации. – Wilhelm

Смежные вопросы