Rails с Sunspot добавляет атрибуты дочерней модели

Итак, я возился с этим часами, и я думаю, что перепробовал все, что уже было опубликовано по этой проблеме. Это мой первый вопрос.

Итак, я пытаюсь найти модели (местоположения): имя_ветви, адрес_ветви1 и т. д. с их дочерней моделью (сотрудники): имя_имя, используемое в этой модели в качестве собственного атрибута. Таким образом, желаемый эффект будет заключаться в том, что местоположения (как результаты) будут возвращены, если имя сотрудника местоположения находится в поисковом запросе. Я пытаюсь добиться этого с помощью такого кода:

class Location < ActiveRecord::Base
  belongs_to :partner
  has_many :employees, dependent: :destroy

  validates_presence_of :branch_name, :branch_address1, :branch_country, :branch_zip_code
  accepts_nested_attributes_for :employees, allow_destroy: true, :reject_if > proc { |attributes| attributes['first_name'].blank? }

  searchable do
    text :branch_name, :branch_address1, :branch_city, :branch_zip_code
    text :employee_attributes do
      :first_name
      if :employee_attributes
      end
    end
  end

end

Я хотел бы также использовать имя родительской модели (партнеров), но я тоже не смог заставить это работать.

Могу ли я создать новый столбец в таблице «Местоположения», чтобы фиксировать имя каждого нового сотрудника, или я могу искать в этих моделях дочерние элементы?


person Colton Hagan    schedule 15.05.2015    source источник


Ответы (1)


Я использовал solr с рельсами, у меня были похожие проблемы. Как вы спрашивали о новом столбце, я добавил новое поле в solr

псевдокод

searchable do
 text :first_name, :stored => true
 string  :partner_name, :stored => true do
   partner.name
 end
end

Обратите внимание, что сохраненные поля увеличивают стоимость.

В моем случае мне пришлось запустить несколько запросов, которые заняли 47 секунд, сохранение значения помогло мне избежать нескольких запросов, один запрос занял 5 секунд.

Вам нужно переиндексировать, чтобы получить результаты.

person Sandesh Soni    schedule 15.05.2015
comment
Я все еще получаю этот код при переиндексации. Есть ли что-то еще, что я должен изменить в своем приложении? NoMethodError: undefined method 'first_name' for #<Location:0x007ff308e03528> - person Colton Hagan; 15.05.2015
comment
Я также пошел дальше и использовал идеи этого подхода, чтобы попробовать такие вещи, как string :employees_first_name, :stored => true do employees.first_name end с похожими проблемами: NoMethodError: undefined method 'first_name' for #<Employee - person Colton Hagan; 15.05.2015