#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