2013-11-22 1 views
0

Проблемы:У меня есть категории Facet зацепили в модель статьи, но я не могу понять, как изменить название категории, когда я могу изменить его в категории модели

  • Когда я Гото category/edit/1 и изменить название категории, старое имя все еще отображается в моем выходе фасета.
  • Когда я создаю новую категорию, она не отображается в моей статье articles.category, пока я не создам хотя бы одну статью с этим названием категории (имеет смысл, но непреднамеренно).

Вот соответствующие биты модели статьи:

class Article < ActiveRecord::Base 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    # This is just a custom module I made that does index.refresh on save/delete 
    # to ensure that I'm getting a fresh view of the index on a page load. 
    include ElasticSearch::RefreshIndex 

    # Trimmed out a bunch of fields, but this should be enough to see what's going on. 
    mapping do 
    indexes :title, type: "string", analyzer: "snowball", boost: 10 
    indexes :category do 
     indexes :id, type: "integer", index: "not_analyzed", include_in_all: false 
     indexes :name, type: "string", index: "not_analyzed" 
    end 
    end 

    belongs_to :category, touch: true 

    def self.search() 
    # Trimmed out a lot of code here, but this is just the facet. 
    facet "categories" do 
     terms "category.name", all_terms: true 
    end 
    end 

    def to_indexed_json 
    to_json(include: { category: { only: [:id, :name] } }) 
    end 
end 

Вот соответствующие биты модели Категория:

class Category < ActiveRecord::Base 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 
    include ElasticSearch::RefreshIndex 

    mapping do 
    indexes :id, type: "integer", index: "not_analyzed", include_in_all: false 
    indexes :name, type: "string", analyzer: "not_analyzed", boost: 50 
    indexes :description, type: "string", analyzer: "snowball" 
    end 

    has_many :articles, dependent: :destroy 
    after_touch() { tire.update_index } 
end 

Вот как я использую categories огранку в моих статьях/индексный вид:

<% @articles.facets["categories"]["terms"].each do |facet| %> 
    <%= facet_item "checkbox", "category_name[]", 
     option_value: facet["term"], 
     option_text: facet["term"], 
     facet_count: facet["count"], 
     param: "category_name" 
    %> 
<% end %> 

Не беспокойтесь о том, что делает facet_item, это просто помощник вида, который правильно отображает флажок, метку, подсчет и устанавливает правильное состояние проверки.

Что мне нужно сделать, чтобы исправить эти две проблемы? Первый для меня самый важный, но в идеале я хотел бы выяснить, как заставить обоих работать.

ответ

0

Вы просто должны заставить Переиндексирование каждой статьи, которая использует категорию только отредактированный, как только вы редактировать сказал Категория

+0

Да, это то, что сказал мне карми делать тоже. Просто импортируйте каждую статью, когда я обновляю категорию. Это решает проблему №1, но №2 все еще проблема, любые идеи? – AntelopeSalad

+0

Вы не можете положиться на поиск elasticsearch. Получите список категорий из базы данных, а затем выполните фасет запроса с Elasticsearch, если вы действительно хотите отобразить его – concept47