как мне перевести это из searchlogic в metwhere в Rails 3?

#ruby-on-rails-3 #meta-where

#ruby-on-rails-3 #meta-где

Вопрос:

В searchlogic у меня было следующее:

 Todo.contact_id_is(self.id).ascend_by_original_date.done_date_not_null.first
  

Как мне сделать это в metawhere теперь, когда я в Rails 3? В частности, not_null и сортировка?

Здравствуйте, я немного запутался. Когда я смотрю на именованные области, найденные в meta_search (вместо metawhere)…это больше того, что я ищу … и теперь метапоиск заменяется ransack ….

Каков способ выполнения цепного поиска с помощью sql в моих моделях так, как searchlogic сделал это настолько простым?

… хорошо … теперь похоже, что ransack предназначен для форм, но запросы к моделям — это squeel? Проверяю это….

Ответ №1:

Похоже, что в metawhere нет != оператора, в который он был добавлен, sqeel так что вот возможный обходной путь

 Todo.where( { :contact_id => self.id} ).order( :original_date.asc ).where( '"todos"."done_date" NOT NULL' ).first
  

Комментарии:

1. Я понимаю…. Я не думаю, что contact_id_is работает ….? Я получаю ошибку отсутствия метода….

2. подождите, вы используете sqeel вместо этого, я должен использовать sqeel? Как это поможет?

3. Я получаю сообщение об ошибке, Postgres не обрабатывает NULL? PGError: ОШИБКА: синтаксическая ошибка в СТРОКЕ 1 «NULL» или рядом с ней: … И «todos».»asset_id» = 1)) И (todos.done_date NOT NULL) ^ : ВЫБЕРИТЕ COUNT(*) ИЗ «todos», ГДЕ ((«todos».»asset» = ‘Email’ И «todos».»asset_id» = 1)) И (todos.done_date NOT NULL)

4. Postgres понимает NULL , но, похоже, он "todos"."done_date" не использует todos.done_date . Попробуйте обновленную версию, пожалуйста. Как я понял из документации Squeel , это расширенная версия metawhere . В нем больше операторов.

5. понял, спасибо…. Я использовал то, что вы сделали с metawhere…. Я действительно обнаружил, что not_eq совпадает с not equal