#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?