#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