Условия с пробелами в activerecord найти - PullRequest
1 голос
/ 09 марта 2010

Так что я пытаюсь сделать это

Order.find :all, :conditions => "org = 'test     org'"

что заканчивается стрельбой

SELECT * FROM `orders` WHERE (org = 'test org')

пробел в аргументе удаляется. то, что я пропускаю .. я действительно озадачен здесь. пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 09 марта 2010

Сначала включите общий журнал запросов в MySQL и посмотрите, является ли запрос, полученный и выполненный самим MySQL, правильным.

Это потому, что Rails будет сжимать все дублирующие пробелы из собственных журналов запросов (при работе в режиме разработки):

  # /rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
  def log_info(sql, name, ms)
    if @logger && @logger.debug?
      name = '%s (%.1fms)' % [name || 'SQL', ms]
      @logger.debug(format_log_entry(name, sql.squeeze(' ')))
    end
  end

Если запрос, отправленный в MySQL, согласно самому журналу запросов MySql, по-прежнему неверен, попробуйте еще раз:

Order.find :all, :conditions => [ 'org = ?', 'test     org' ]
1 голос
/ 09 марта 2010

Это не проблема с рельсами, а способ поведения mysql.

Например:

mysql> select first_name from users where first_name = "George                    ";
+------------+
| first_name |
+------------+
| George     |
| George     |
+------------+
2 rows in set (0.00 sec)

Вот один из способов исправить это:

mysql> select first_name from users where BINARY(first_name) = BINARY("George                    ");
Empty set (0.00 sec)

mysql> select first_name from users where BINARY(first_name) = BINARY("George");
+------------+
| first_name |
+------------+
| George     |
| George     |
+------------+
2 rows in set (0.00 sec)

Удачи!

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