2012-05-04 4 views
4

У меня есть две моделейReindex только одна конкретная запись с солнечной

class User < ActiveRecord::Base 
    has_many :posts 

    searchable do 
    text :post_titles 
    end 

    def post_titles 
    posts.map &:title 
    end 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

проблема заключается в том, что когда я обновляю название Post пятна не обновляется индексом для соответствующего пользователя, и это не для поиска новых данных. Если я делаю User.index, он решает проблему, но занимает слишком много времени. Есть ли лучшие решения для обновления индекса родительской записи при изменении дочерней записи (например, переиндексация только родительской записи, а не всех пользователей)?

ответ

10

Sunspot предоставляет экземпляр index() метод, для индексации одной записи.

Что я сделал

class Post 

    belongs_to :user 
    after_save :update_user_index 

private 

    def update_user_index 
    user.index 
    end 
end 

Если вы работаете это в консоли, и вы хотите, чтобы увидеть результаты сразу, звоните Sunspot.commit

+0

Почему я всегда найти решение через несколько минут после того, как я задал вопрос в StackOverflow: \ – Bohdan

+1

Джефф Этвуд уже говорил о [этом явлении] (http://www.codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html). Ура! – aitchnyu

+0

Зачем вам нужен Sunspot.commit? У меня этот код работает в моем приложении, но я не вижу никаких изменений, пока не запустил Sunspot.commit в консоли. Зачем вам это нужно, только когда с консоли? – joncodo