Rails 3 получает неправильное количество в запросе

#ruby #ruby-on-rails-3

#ruby #ruby-on-rails-3

Вопрос:

Я пытаюсь получить количество сообщений, которые не были прочитаны.

В модели сообщений есть столбец с именем read_at . Если сообщение было прочитано, в read_at есть значение, если оно непрочитано, то это значение равно нулю.

У меня есть одно прочитанное сообщение и одно непрочитанное сообщение. Я получаю 0 непрочитанных сообщений (я должен получать 1). Это код:

 Message.all(:conditions => 
  ['website_id = ? AND read_at = ?', current_website.id, nil]).count
  

Кажется, что запрос правильный, поскольку журнал разработки показывает мне

 Message Load (0.2ms)  SELECT "messages".* FROM "messages" 
                        WHERE (website_id = 2 AND read_at = NULL)
  

Ответ №1:

вместо read_at = NULL того, чтобы пытаться read_at is null , это SQL.

 :conditions => ['website_id = ? AND read_at is ?', current_website.id, nil]
  

Вот короткая статья о SQL nulls и о том, как их использовать:

http://www.w3schools.com/sql/sql_null_values.asp

Надеюсь, это поможет


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

1. Правильно. Условия Rails или предложение where — одно из немногих мест, где вам нужно погрузиться в сам SQL. И SQL особым образом обрабатывает нули в выражениях.

Ответ №2:

Хотя проблема в том, на что указывает @pdjota, вам следует использовать нотацию Rails 3, вот как я бы это написал:

 Message.where('website_id = ? AND read_at IS NULL', current_website.id).count