acts_as_solr не обновляет связанные модели в Rails - PullRequest
0 голосов
/ 18 марта 2010

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

Пример:

У меня есть три модели:

class Merchant < ActiveRecord::Base
  acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
  ...
end

class Coupon < ActiveRecord::Base
  acts_as_solr :fields => [:store_name, :url, :code, :description]
  ...
end

class Tag < ActiveRecord::Base
  acts_as_solr :fields => [:name]
  ...
end

Я использую следующую строку для поиска:

Merchant.paginate_by_solr(params[:q], :per_page => PER_PAGE, :page => [(params[:page] || 1).to_i, 1].max)

По какой-то причине после добавления купона со словом «обувь» в описании запрос «обувь» не возвращает продавца, связанного с купоном. Все ассоциации работают, и если я запускаю rake solr: reindex, поиск возвращает новый купон.

Нужно ли обновлять индекс Merchant каждый раз при создании нового купона? Нужно ли обновлять индекс для всего класса или я могу просто обновить ассоциированного продавца?

Разве это не должно быть сделано автоматически?

Ответы [ 2 ]

1 голос
/ 18 марта 2010

Хорошо, оказывается, пара вещей продолжалась.

В модели купона я вставил обратный вызов after_save, чтобы обновить документ solr для соответствующего продавца:

def update_merchant_solr
  merchant.solr_save
end

Проблема с тегом возникла из-за порядка обратных вызовов after_save для acts_as_solr и is_taggable. Merchant after_save, который вставляет solr, произошел до обратного вызова is_taggable, поэтому при вызове обратного вызова merchant solr для обновления документа теги с ним еще не были связаны. Переключение порядка сработало:

class Merchant < ActiveRecord::Base
  is_taggable :tags
  acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
  ...
end
1 голос
/ 18 марта 2010

Я использую Sunspot, поэтому, скорее всего, будут различия, но мне пришлось настроить обратные вызовы в связанных моделях, чтобы переиндексировать родительскую запись. Полагаю, тебе придется сделать то же самое.

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