ElasticSearch Ruby не найден атрибут объекта после запроса - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь использоватьasticsearch для поиска в произвольном тексте. Система разделена на «Список», «Лицо», «Учетная запись» До тех пор, пока я не добавил «Список» и «Лицо», после добавления учетной записи мой поиск работал правильно. После поиска, когда я пытаюсь просмотреть результат, он возвращает nilClass к учетной записи. файлы можно увидеть ниже:

list.rb

class List < ApplicationRecord

    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks

    after_touch() { __elasticsearch__.index_document }

    has_and_belongs_to_many :people, after_add:    [ lambda { |a,c| a.__elasticsearch__.index_document } ],
                                         after_remove: [ lambda { |a,c| a.__elasticsearch__.index_document } ]

    has_many :accounts, through: :people

    settings do
        mappings dynamic: false do
            indexes :name, type: :text
            indexes :people, type: :object do
                indexes :name , type: :text
            end
            indexes :accounts, type: :object do
                indexes :name_account , type: :text
            end
        end
    end

    # Customize the JSON serialization for Elasticsearch
    def as_indexed_json(options={})
        self.as_json(
            include: { people: { only: :name},
                       accounts: { only: [:name_account, :social_network}
                    })
    end
end

account.rb

class Account < ApplicationRecord
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  belongs_to :person , touch: true
end

person.rb

class Person < ApplicationRecord
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks

    has_and_belongs_to_many :lists
    has_many :accounts

    after_update { self.accounts.each(&:touch) }

end

index . html .erb

   <% @lists.each do |list| %>    
      <% list.people.each do |people| %>
      <% people.accounts.each do |account| %>        
        <td><%= people.name %></td>
        <td><%= list.name %></td>
        <td><%= account.name_account %></td>
        <td><%= account.social_network %></td>
      </tr>
      <% end %>
      <% end %>
    <% end %>

list_controller

class ListsController < ApplicationController

  def index
    query = params[:search_posts].presence && params[:search_posts][:query]

    if query
      @lists = List.search(query)
    else
      @lists = List.all
    end
  end
end

MessageError: undefined method 'each' for nil:NilClass in <% people.accounts.each do |account| %>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...