2017-02-15 2 views
0

Я хочу, чтобы получить SQL генерируется на управлениеПреобразовать рельсы вызова сохранить/обновление SQL

.save

когда я запускаю эту команду в консоли

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 

Это фактически обновляет запись. Я хочу знать sql-запрос, сгенерированный без обновления записи.

Я пробовал использовать .to_sql, но это работает только для отношений.

ответ

0

Вы можете использовать режим песочницы с вашего терминала: rails console --sandbox, который позволяет играть с моделями, используя все методы, как: .create, .delete, .save, .update не затрагивая исходный DB. Все сделанные вами изменения будут отброшены при выходе.

UPDATE

Вы можете достичь этой цели с AREL от вашего терминала:

# 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 вы можете найти все менеджеры AREL, как delete_manager.rb, select_manager.rb и другие.

Хорошо читаю: http://jpospisil.com/2014/06/16/the-definitive-guide-to-arel-the-sql-manager-for-ruby.html

+0

Благодарим за ответ. Но то, что я пытаюсь получить, это sql-эквивалент '.save'. Строка типа 'INSERT ...' ИЛИ 'UPDATE ....' – aelor

+0

Пожалуйста, проверьте обновленный ответ, я надеюсь, что это поможет – Blackcoat77

Смежные вопросы