Проблемы с использованием Thinking Sphinx в Ruby on Rails с несколькими моделями - PullRequest
1 голос
/ 19 января 2011

Я занимаюсь разработкой сайта на Ruby on Rails с помощью поисковой системы Sphinx (я использую Thinking Sphinx).У меня есть модель, в которой я хочу выполнить поиск, и я использую другие модели (я установил связи в моделях и в таблицах), но я хочу сделать дополнительные ВНУТРЕННИЕ СОЕДИНЕНИЯ, поэтому у меня есть что-то вроде этого:1001 *

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
    end
end

Можно ли сделать что-то подобное?

class Group < ActiveRecord::Base
        belongs_to :person
    has_many :categories, :dependent => :destroy

    define_index do
        indexes group_name
        indexes person.fullnameindexes categories.category_name
        indexes categories.category_name
        indexes subcategories.subcategory_name #additional table
    end
end

Как видите, я добавляю новую модель (подкатегорию), которая не имеет отношения к группе моделей, ноэто имеет отношение к модели категории, это нормально?или как правильно это сделать?

Вот ссылки, по которым я следую:

http://freelancing -god.github.com / ts / en / indexing.html
http://freelancing -gods.com / posts / a_concise_guide_to_using_thinking_sphinx

Ответы [ 2 ]

3 голосов
/ 20 января 2011

Если на подкатегорию ссылаются в модели категории, вы можете сделать это:

indexes categories.subcategories.subcategory_name, :as => :subcategory_names

Мышление Сфинкс с радостью пройдет через ассоциации в более глубокие ассоциации, если вы этого хотите.

0 голосов
/ 19 января 2011

Я думаю, что короткий ответ на это "нет".ThinkingSphinx попытается сослаться на ассоциацию на Group с именем subcategories, которая не существует, и вы должны получить сообщение об ошибке при индексации.

Если Category has_many :subcategories, вы можете выразить это в Groupс параметром :through:

class Group < ActiveRecord::Base
  belongs_to :person
  has_many :categories, :dependent => :destroy
  has_many :subcategories, :through => :categories

, а затем индекс должен распознать связь, хотя в документах указывается, что для этого вам нужен явный псевдоним, поэтому:

indexes subcategories.subcategory_name, :as => 'subcategory_name'
...