2012-07-20 6 views
5

Rails 2.3.14 uygulaması için MYSQL veritabanını ararken, tek tırnak işareti (kesme işareti) içeren dizeleri arayabilmek için arama dizesini uygun şekilde ayırmam gerekir. Bunu yapmanın en iyi yolu nedir? Önemli olan durumlarda mysql gem kullanıyorum.Ruby on Rails MYSQL sorguları için nasıl kaçınır?

cevap

5

Sen activerecord en quote yöntemi (örn ActiveRecord::Base.connection.quote("string with ' apostrophe")) kullanabilirsiniz, ancak activerecord sorgusu yöntemleri sizin için zaten SQL kaçmak. Örneğin:

a = "string with ' apostrophe" 
ModelName.where("field1 = ?", a) 

' 'kesme işareti 'ile dize' ile "kesme işareti ile dize"' değişecek

+1

Bu kısa sorgular için iyidir, ancak daha karmaşık sorgular için SQL'i daha doğrudan kullanmak daha kolay hale gelir. Beş farklı tabloda arama yaptığım bir duruma bakıyorum ve bu sözdizimini kullanarak hangi değişkenin sorguyla eşleştiğini izlemek çok zor oluyor. – joanwolk

+0

Kapsamlara bakın. Sorgunuzu mantıksal parçalara ayırmanıza ve gerektiğinde bunları zincirlemenize izin verir. Çok daha temiz – Angelo

+1

Kapsamlarımız var. Ayrı ayrı: Söz konusu uygulama ayrıca bir performans değerlendirmesi olarak Rails SQL yöntemleri yerine ham SQL sorguları kullanıyor, bu yüzden bu kodu ActiveRecord yöntemlerine geri döndürmeyeceğim. – joanwolk

8

mysql gem'i kullanırken, Mysql.escape_string() yöntemini kazanırsınız. aşağıdaki gibi kullanın:

search_terms = Mysql.escape_string("it's working!") 
conditions = [ "table1.name LIKE '%#{search_terms}%'" ] 
# use conditions for MYSQL query as appropriate 
+1

nerede postgres'in böyle bir şey mi ?? –

8

Raylar quotes strings şöyle:

# Quotes a string, escaping any ' (single quote) and \ (backslash) characters. 
def quote_string(s) 
    s.gsub(/\\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode) 
end 
+0

Bu, postgresql –

+0

ile çalıştı. Bu harika, teşekkürler – jahrichie