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
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
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
nerede postgres'in böyle bir şey mi ?? –
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
Bu, postgresql –
ile çalıştı. Bu harika, teşekkürler – jahrichie
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
Kapsamlara bakın. Sorgunuzu mantıksal parçalara ayırmanıza ve gerektiğinde bunları zincirlemenize izin verir. Çok daha temiz – Angelo
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