2010-01-16 3 views
0

У меня есть таблица Блог принадлежит пользователю через user_id.Нужна помощь с SQL-соединением в Rails

Я использую мышление sphinx для индексации блога, но я хочу, чтобы он индексировал блоги, в которых пользователь в данный момент активен (user.status = User :: ACTIVE).

У меня есть код для создания индекса, но я знаю, что предложение «где» неверно. Что это должно быть?

define_index do 
    indexes title 
    indexes body 

    where "user.status = '#{User::ACTIVE}'" 
end 

Update: Насколько я могу видеть, где метод просто проходящее SQL кода в ядро ​​базы данных. Похоже, что это должно быть выполнено, передавая код для JOIN, но я не знаю, что достаточно SQL для создания оператора JOIN.

Второе обновление: Прослушивание SQL с помощью SQL, похоже, JOIn должен идти до WHERE, поэтому это невозможно сделать с помощью кода SQL, если только кто-нибудь не знает лучше.

ответ

0

Я не считаю, что статья where поддерживает это. Это добавление к SQL за кулисами, но у него нет доступа к ассоциациям Rails. Альтернативой является также предоставление вашему блогу статуса поля, который зависит от пользователя.

Сначала добавьте поле статуса в таблицу ваших блогов. Затем добавьте это в свою модель пользователя:

before_save :update_blog_status 

protected 

def update_blog_status 
    self.blog.update_attribute(:status, self.status) 
end 

Это автоматически сохранит ваш статус в блоге. Я не знал, есть ли у одного пользователя несколько блогов, поэтому, если это так, просто настройте этот код соответствующим образом.

Затем обновите ваш блог индексатор с подходящей, где положение:

define_index do 
    indexes title 
    indexes body 

    where "status = '#{User::ACTIVE}'" 
end 

Это должно быть все, что вам нужно :)

0

Я много о сфинкса, но только выстрел в темноте попробовать не знаю ..

users.status = '#{User::ACTIVE}' 
1

Может быть, вы должны попробовать пользователи (имена таблиц во множественном числе)

define_index do 
    indexes title 
    indexes body 

    # Use this line, if status is numeric 
    where "users.status = #{User::ACTIVE}" 

    # ... and this one, if it's a string 
    where "users.status = '#{User::ACTIVE}'" 
end 

В конце концов, вы можете взглянуть на manual.

0

Возможно, вам просто нужен атрибут dummy для обеспечения того, чтобы мышление sphinx объединялось в блог и пользовательские таблицы. Не зная специфику вашей схемы, попробовать что-то вроде:

define_index do 
    indexes title 
    indexes body 
    has user(:id), :as => :user_id 

    where "users.status = '#{User::ACTIVE}'" 
end