开发者

Problems using Thinking Sphinx in Ruby on Rails with multiple models

I'm developing a website on Ruby on Rails with the search engine Sphinx (I'm using Thinking Sphinx). I have a model in which I want to make the searches and I'm using another models (I made the relationships in the models and in the tables) but I want to make additional INNER JOINS, so, I have someth开发者_Python百科ing like this:

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

It's ok to make something like this?

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

As you can see, I'm adding a new model (Subcategory) that has no relationship with the model Group, but it has a relationship with the model Category, is this ok? or what is the right way to do that?

Those are the links I'm following:

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

http://freelancing-gods.com/posts/a_concise_guide_to_using_thinking_sphinx


If subcategory is referenced in the Category model, you can do this:

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

Thinking Sphinx will happily go through associations into deeper associations if you want it to.


I think the short answer to this is "no". ThinkingSphinx will try to reference an association on Group named subcategories, which won't exist, and you should get an error when indexing.

If Category has_many :subcategories, you can express this in Group with a :through option:

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

and then the index should recognize the association, though the docs point out that you need an explicit alias when doing this, so:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜