Ben CodeIgniter en gibi bir şey arıyorum:ActiveRecord tarafından Ruby on Rails uygulamasında gerçekleştirilen son SQL sorgusunu nasıl alabilirim?
$this->db->last_query();
(http://codeigniter.com/user_guide/database/helpers.html)
Ben CodeIgniter en gibi bir şey arıyorum:ActiveRecord tarafından Ruby on Rails uygulamasında gerçekleştirilen son SQL sorgusunu nasıl alabilirim?
$this->db->last_query();
(http://codeigniter.com/user_guide/database/helpers.html)
AFAIK, sorgularının listesine erişmek için kolay bir yolu yoktur. Bununla birlikte, süper basit bir kayıt cihazı oluşturarak bunlara kolayca erişebilirsiniz.
ActiveRecord::ConnectionAdapters::AbstractAdapter
sınıfını açarsanız, günlük adı verilen bir yöntem görürsünüz. İfadenin günlüğe kaydedilmesi için her bir sorguda bu yöntem çağrılır. Varsayılan olarak, tüm ifadeleri Rails logger ile günlüğe kaydeder.
Sen Şimdi çalıştırılır tüm SQL sorguları içermelidir
ActiveRecord::Base.connection.last_query # => ...
+1. –
Metodu tanımından sonra aramayı 'alias_method_chain''e koymam gerekiyordu, aksi halde şu hataya neden oldu:' core_ext/module/aliasing.rb: 32: 'alias_method' ': undefined method' log_with_last_query 'class' ActiveRecord :: ConnectionAdapters :: AbstractAdapter '(NameError) ' –
Kişisel gelişim günlüğü ile sorgu alabilirsiniz
ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
attr_reader :last_query
alias_method_chain :log, :last_query
def log_with_last_query(sql, name, &block)
@last_query = [sql, name]
log_without_last_query(sql, name, &block)
end
end
gibi bir şey yapabilirsiniz.
Evet, ama işte bu - Sorunun TÜMÜ var. Sadece açık bir şekilde ne kaydettiğimi görmek istiyorum. –
Muhtemelen ActiveRecord'un daha yeni bir sürümüne sahip olduğum için bu soru sorulduğunda, ancak ActiveRecord 3.2.3 ile çalışmaya başlamak için Simone Carletti komut dosyasını güncelledim: Ek özniteliği binds
ekledim ve aramayı Yöntem tanımının altında alias_method_chain
, aksi halde yöntemi bulamadığını söyleyen bir hata oluşturur.
ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
attr_reader :last_query
def log_with_last_query(sql, name, binds=[], &block)
@last_query = [sql, name]
log_without_last_query(sql, name, binds, &block)
end
alias_method_chain :log, :last_query
end
son sorgu aynı hala Başlarken:
ActiveRecord::Base.connection.last_query # => ...
yapmaya çalışıyorsun sen? Bunun basit olduğunu düşünmüyorum - muhtemelen ActiveRecord'ı bir yerlerde değiştirmelisiniz. Ben de böyle bir eylemin (kuşkusuz sızan) soyutlamayı kırmasından endişe duyuyorum. Yapacağınız şeyleri başarmak için daha iyi, Rails dostu bir yol olabilir. –
Rails/ActiveRecord günlük seviyesi düşük olarak ayarlanmışken sorguları günlüğe kaydetmek istedim, bu yüzden sadece gerçekten ilgilendiğim sorguları görebiliyordum. Maymun yamalarının bir parçası olan Rails'in bir parçasını yamalamak için –