I have a table Blog belongs to User through user_id.
I’m using thinking sphinx to index the blog, but I only want it to index blogs where the user is currently active (user.status = User::ACTIVE).
I have the code below for creating the index, but I know the ‘where’ clause is wrong. What should it be?
define_index do
indexes title
indexes body
where "user.status = '#{User::ACTIVE}'"
end
Update:
As far as I can see the where method is simply passing SQL code to the database engine. It looks like this should be do-able by passing in the code for a JOIN, but I don’t know what enough SQL to create a JOIN statement myself.
Second update:
Messing around with SQL it appears the JOIn has to go before the WHERE, so it won’t be possible to do this using SQL code, unless anyone knowns better.
I don’t believe the
whereclause supports this. It’s adding to the SQL behind the scenes, but it doesn’t have access to the Rails associations. An alternative is to give your blog record a status field as well, that is dependent on the user.First, add a status field to your blogs table. Then, add this to your user model:
That will automatically keep your blog status updated. I didn’t know if one user has_many blogs, so if that’s the case just adjust this code accordingly.
Then update your blog indexer with the appropriate where clause:
That should be all you need 🙂