Как добавить запись в солнечное пятно "search.results" - PullRequest
0 голосов
/ 07 апреля 2020

Я обнаружил 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" в результат поиска, чтобы я не вызывал профиль ассоциации?

это правильный способ сделать это ??? любое предложение открыто:)

1 Ответ

0 голосов
/ 07 апреля 2020
 Person.search(include: [:profile]) 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

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

Я думаю, что моя таблица отображает ассоциацию результатов поиска. не ассоциация рельсов. не стесняйтесь комментировать. если мое объяснение не верно. я также новичок спасибо:)

...