Различные типы в Postgresql .. Как правильно это сделать? - PullRequest
0 голосов
/ 19 января 2011

Я получаю эту ошибку, но я не совсем уверен, как написать это так, чтобы она удовлетворяла postgresql ..

ActionView::Template::Error (PGError: ERROR:  operator does not exist: character varying == unknown
LINE 1: ...ed_at > '2011-01-19 16:05:18.738413' AND category == 'humor'...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT     "posts".* FROM       "posts"  WHERE     (created_at > '2011-01-19 16:05:18.738413' AND category == 'humor')):
    77:             - for category in @categories
    78:               %li
    79:                 .new_posts
    80:                   - if current_user && !current_user.last_logins.select{|ll|ll.category_id == category.id}.empty? && Post.find(:all, :conditions => ["created_at > ? AND category == ?", current_user.last_logins.find_by_category_id(category).updated_at, category.name]).size > 0

Я извиняюсь, если это расплывчато, но я не уверен, чтоЯ понимаю это сам.

Я думаю, что происходит, сравнивая varchar с целым числом?Поскольку я не могу разумно проверить свои таблицы sql, есть ли способ обойти это?

Ответы [ 2 ]

7 голосов
/ 19 января 2011

Вы, вероятно, хотели использовать одиночное равенство (=). К сожалению, в земле SQL, = это тест на равенство, а не ==.

3 голосов
/ 19 января 2011

Postgres не использует оператор двойного равенства, он использует один.

Так измените это:

:conditions => ["created_at > ? AND category == ?", current_user.last_logins.find_by_category_id(category).updated_at, category.name]

до:

:conditions => ["created_at > ? AND category = ?", current_user.last_logins.find_by_category_id(category).updated_at, category.name]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...