2017-02-15 2 views
0

Ich möchte die SQL auf LaufConvert speichern/aktualisieren Aufruf Schienen auf SQL

.save

erzeugt werden, wenn ich diesen Befehl in der Konsole laufen

irb(main):018:0> a = User.last 
irb(main):018:0> a.first_name 
=> "Mohan" 
irb(main):019:0> a.first_name = 'Sohan' 
=> "Sohan" 
irb(main):020:0> a.save 
    (2.0ms) BEGIN 
    SQL (1.4ms) UPDATE `users` SET `first_name` = 'Sohan', `updated_at` = '2017-02-15 14:00:10' WHERE `users`.`id` = 1 
    (31.3ms) COMMIT 
=> true 

Das tatsächlich aktualisiert den Datensatz. Ich möchte die sql Abfrage wissen, die erzeugt wird, ohne den Rekord zu aktualisieren.

Ich versuchte mit .to_sql, aber das scheint nur für Beziehungen zu arbeiten.

Antwort

0

Sie können Sandbox-Modus von Ihrem Terminal verwenden: rails console --sandbox, die Sie mit Modellen spielen können, mit allen Methoden wie: .create, .delete, .save, .update, ohne die ursprüngliche DB zu beeinflussen. Alle Änderungen, die Sie vornehmen, werden beim Beenden zurückgesetzt.

UPDATE

Sie dieses Ziel mit AREL von Ihrem Terminal erreichen:

# Arel::InsertManager 
table = Arel::Table.new(:users) 
insert_manager = Arel::InsertManager.new 
insert_manager.into(table) 
insert_manager.insert([ [table[:first_name], 'Eddie'] ]) 
insert_manager.to_sql 

# Arel::UpdateManager 
table = Arel::Table.new(:users) 
update_manager = Arel::UpdateManager.new 
update_manager.set([[table[:first_name], "Vedder"]]).where(table[:id].eq(1)).table(table) 
update_manager.to_sql 

Here Sie alle Arel Manager finden können, wie delete_manager.rb, select_manager.rb und die Anderen.

Gut zu lesen: http://jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html

+0

Vielen Dank für Ihre Antwort. Aber was ich versuche zu bekommen, ist das SQL-Äquivalent eines '.save'. Ein String wie 'INSERT ...' ODER 'UPDATE ....' – aelor

+0

Bitte überprüfen Sie die aktualisierte Antwort, ich hoffe es hilft – Blackcoat77