Поможет ли Active Record объединить две строки в нейтральной для базы данных форме? - PullRequest
1 голос
/ 31 октября 2010

Я добавляю поддержку SQLite в кодовую базу Rails 2.3, разработанную для MySQL.

Большинство изменений до сих пор были довольно простыми, но теперь я нашел несколько примеров, таких как следующий код:

SomeModel.find(:first,
  :conditions => ["? LIKE CONCAT(some_attribute, '%')", a_variable]
)

Я не могу просто использовать оператор конкатенации ANSI, потому что двойные каналы означают что-то другое для MySQL. То есть следующий код проходит на SQLite3, но не работает на MySQL:

SomeModel.find(:first,
  :conditions => ["? LIKE some_attribute || '%')", a_variable]
)

Есть ли что-то, что я чище могу сделать, чем какое-то case database_adapter when :mysql ...?

1 Ответ

3 голосов
/ 12 апреля 2011

Моё безобразное решение:

ActiveRecord::Base.connection.class.concat_sql("firstname", "' '", "lastname")

# config/initializers/active_record_hacks.rb
class ActiveRecord::ConnectionAdapters::MysqlAdapter
  def self.concat_sql(*values)
    "CONCAT(#{values * ', '})"
  end
end

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  def self.concat_sql(*values)
    values * " || "
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...