Используйте функции SQL для вставки / обновления в ActiveRecord - PullRequest
3 голосов
/ 22 августа 2011

Я хочу хранить IP-адреса (v4 и v6) в моем приложении rails. Я установил расширение для MySQL добавляет функции для преобразования строк ip в двоичный файл, что позволит мне легко выполнять запросы по диапазону IP.

Я могу использовать неэкранированные SQL-операторы для запросов типа SELECT, это просто.

Сложность в том, что мне также нужен способ перезаписать способ экранирования поля для операторов вставки / обновления.

Это заявление ActiveRecord

new_ip = Ip.new
new_ip.start = '1.2.3.4'
new_ip.save

Должен сгенерировать следующий оператор SQL

INSERT INTO ips(start) VALUES(inet6_pton('1.2.3.4'));

Есть ли способ сделать это? Я безуспешно пробовал многие вещи, в том числе переопределение ActiveRecord::Base#arel_attributes_values: сгенерированный sql всегда конвертируется в двоичный (если это имеет значение, мой столбец - MySQL VARBINARY (16)).

1 Ответ

0 голосов
/ 22 августа 2011
ActiveRecord::Base.connection.execute("INSERT INTO ips(start) VALUES(inet6_pton('1.2.3.4'))")
...