rails и sql, где NOT NULL не работают должным образом с объединением.Rails 2.3.5 и Ruby 1.8.7 - mysql 5 - PullRequest
2 голосов
/ 02 июня 2011

У меня есть 3 таблицы и модели: бренды brand_data_records и brand_data_records_brands - таблица соединения

В рельсах я хочу, чтобы все brand_data_records для данного диапазона дат для данного бренда, где данный атрибут не равен нулю в БД.

Итак, у меня есть:

BrandDataRecord.find(:all, :select => column_match, :joins => :brands, :conditions => ["brand_data_records_brands.brand_id = ? and date_retrieved >= ? AND date_retrieved <= ? and ? IS NOT NULL",brand.id,start_date,end_date,column_match])

Это генерирует этот sql:

  SELECT sentiment FROM `brand_data_records` INNER JOIN `brand_data_records_brands` ON `brand_data_records_brands`.brand_data_record_id = `brand_data_records`.id INNER JOIN `brands` ON `brands`.id = `brand_data_records_brands`.brand_id WHERE (brand_data_records_brands.brand_id = 330516084 and date_retrieved >= '2011-05-02' AND date_retrieved <= '2011-06-01' and 'sentiment' IS NOT NULL) 

Что обычно работает, но возвращает кучу дополнительных записей с нулевым значениемзначение.Я думаю, что это как-то связано с объединениями, если я удаляю их с помощью sql, только это работает нормально, но я не уверен, как исправить в rails (или даже в sql для этого факта)

1 Ответ

1 голос
/ 02 июня 2011

Вы, вероятно, имеете в виду ссылку на столбец:

 `sentiment` IS NOT NULL

То, что вы делаете непреднамеренно, это утверждение, что строка 'sentiment' не равна нулю, что, конечно, никогда не будет Передача :sentiment или 'sentiment'.to_sym' в ваших условиях должна исправить это, поскольку символы конвертируются с обратными кавычками при конвертации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...