Отображение взаимосвязи RoR

#ruby-on-rails #ruby #relationships

#ruby-on-rails #ruby #отношения

Вопрос:

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

 @parent.child.each do |item|
item.name
end
  

Но как бы я вызвал только конкретный дочерний элемент, указанный там id

например.

Идентификатор дочернего элемента равен 14

Хотелось бы, чтобы вызов, подобный:

 @parent.child[childid].name #>>>>>> CHILD'S NAME
  

Ответ №1:

Попробуйте:

 @parent.children.detect { |child| child.id == 14 }
  

Это должно вернуть объект без запроса к базе данных. Затем вы можете вызвать для него .name метод.

Ответ №2:

@parent.child[14] скорее всего, будет работать некорректно, child это массив, если это has_many отношение, но индекс массива не совпадает с идентификатором дочернего элемента. итак, вы можете сделать что-то вроде этого:

 @parent.child.find(14).name
  

Я не совсем уверен, но если вы сделаете что-то вроде этого:

 @parent = Parent.find(some_id, :include => :child)
@parent.child.find(some_other_id) # should hit the query cache
  

Комментарии:

1. Это работает, но есть ли какие-либо другие способы сделать это, кроме как делать больше вызовов db?