Я обнаружил N + 1 в моем проекте.
У меня есть две модели
class Person
has_one :profile
delegate :first_name, :middle_name, :last_name, :full_name, to: :profile
searchable do
text :first_name, stored: true
text :middle_name, stored: true
text :last_name, stored: true
text :full_name, stored: true
end
end
class Profile
delegate :first_name, :middle_name, :last_name, :full_name, to: :profile
def full_name
#some code that will output full name
end
end
Это мой контроллер для Персона
def index
args = search_params
search = person_search(args)
@persons = search.results
end
def persons_search(args)
fulltext_fields = %i[first_name last_name full_name].freeze
Person.search do
if params.key?(:q)
fulltext params[:q], fields: fulltext_fields, query_phrase_slop: 0, minimum_match: 2 do
fulltext_fields.each { |field| highlight field, max_snippets: 3, fragment_size: 100 }
end
end
fulltext_fields.each do |field|
fulltext params[field], fields: field, query_phrase_slop: 0, minimum_match: 3 if params.key?(field)
end
end
end
Хорошо, теперь я Объясните, что теперь бэкэнд позволяет go HTML
ее моей таблице
tbody
- @members.each do |member|
tr
td.p-2 = member.reference_number
td.p-2 = member.first_name <----------- THIS IS THE N + 1
, как вы можете видеть в моей таблице, я повторяю, чтобы вызвать "first_name" (у меня есть 5k запись) мой вывод заключается в том, чтобы добавить "first_name" в результат поиска, чтобы я не вызывал профиль ассоциации?
это правильный способ сделать это ??? любое предложение открыто:)