To force joins to all the polymorphic tables, you'll need to add a  
field or - probably better - an attribute that uses a common field  
across all the appropriate models. The best choice is, of course, id.

So:

has owner(:id), :as => :owner_id

And then both clubs and projects should be included in the SQL  
statement *IF* there are posts owned by projects in the database.  
Thinking Sphinx can't figure out by itself which models are  
appropriate for polymorphic joins, so it looks at the existing data.  
If there's no data joining posts to clubs or projects, then they won't  
have the needed joins. I know it's not an ideal situation, but I  
haven't found a better way yet.

-- 
Pat

On 12/12/2008, at 10:01 PM, Shumkov wrote:

>
> Hello, i have some problem with index conditions.
> I'm have Post model with polymorphic relationship with Club model and
> Project model. And i can't index posts if club or project is not
> active.
>
> Look this:
>
> class Post < ActiveRecord::Base
>
>  belongs_to :owner, :polymorphic => true
>
>  define_index do
>    indexes title, cached_tag_list
>    indexes body, :html_strip => true
>
>    has owner.city_id, :as => :city_id
>
>    where "(`clubs`.activated_at IS NOT NULL OR
> `projects`.activated_at IS NOT NULL)"
>
>    set_property :match_mode => :boolean
>    set_property :delta => true
>  end
>
> end
>
> class Club < ActiveRecord::Base
>  has_many :posts, :as => :owner
> end
>
> class Project < ActiveRecord::Base
>  has_many :posts, :as => :owner
> end
>
> If i'm have projects and clubs and posts index sql query is good! But
> if i'm don't have Project for example in index sql query join with
> table projects is not present. And i'm have error on indexing:
>
> ERROR: index 'post_core': sql_range_query: Unknown column
> 'projects.activated_at' in 'where clause' (DSN=mysql://
> root:*...@localhost:3306/clubovorot).
>
> What can i do?
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to