С учетом созданного отношения, как я могу получить доступ к элементу отношения, которое соответствует некоторому (очень простому) условию без запуска дополнительного запроса к базе данных?Доступ к произвольному элементу ActiveRecord :: AssociationRelation без дополнительного запроса db
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
joined = Foo.all.joins(:bars).select('foos.*, bars.baz')
a = joined.to_a # no additional query
b = joined.find_by_baz(1) # these will both generate additional queries
c = joined.find_by_baz(4) # even though the data is already available
Возможно, у меня может быть что-то простое, но есть ли способ получить доступ к произвольному элементу ассоциации на произвольное значение?
Возможно, обходное решение, которое я подумал, это загрузить ассоциацию в массив, индексированный значением, которое меня интересует. Это кажется более хрупким, чем идеалом.
Данные не 'уже доступны', пока вы не попытаетесь изучить записи. Поэтому 'a = join.to_a' выполняет поиск. Если вы хотите избежать последующего поиска db, используйте записи в массиве «a» ... 'b = a.select (bas: 1) .first' – SteveTurczyn
, который является действительным пунктом о' уже доступном', о котором я знал но не сделал явного, спасибо за упоминание. и использование формы массива с выбором, похоже, является способом выхода. – jay