2011-08-22 30 views
3

我想在我的Rails應用程序中存儲IP地址(v4和v6)。我已經安裝an extension to MySQL增加功能將IP字符串轉換爲二進制,這將允許我容易地查詢IP範圍。使用SQL函數在ActiveRecord中插入/更新

我可以使用非轉義的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))。

回答

0
ActiveRecord::Base.connection.execute("INSERT INTO ips(start) VALUES(inet6_pton('1.2.3.4'))") 
+0

呀很好,我想繼續使用的好處定期保存/創建,如果在所有possibble電話和隨之而來(驗證,回調等)一切 – Jimmy

+0

這也不能防止SQL注射 –