rails - получить SQL модели сохранить - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно иметь возможность выводить ОБНОВЛЕНИЯ SQL, которые будут генерироваться Rails, без их фактического запуска или сохранения записей. Вместо этого я буду выводить обновления SQL в файл.

Есть ли способ сделать это в Rails, без использования строковой интерполяции?

Можно ли сделать что-то вроде следующего:

p = Post.where (something)

p.some_value = some_new_value

p.to_sql??? # how to generate the update statement

вместо:

"UPDATE TABLE SET field_1 = #{new_field} WHERE ID = " etc etc

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Взял у @RF Nelson и обернул его в метод.Вы можете просто вызвать to_update_sql с вашей моделью в качестве аргумента для получения SQL.

def to_update_sql(model)
  return '' if model.changes.empty?

  table = Arel::Table.new(model.class.table_name)
  update_manager = Arel::UpdateManager.new(model.class)
  update_manager.set(model.changes.map{|name, (_, val)| [table[name], val] })
                .where(table[:id].eq(model.id))
                .table(table)

  return update_manager.to_sql
end

post = Post.first
post.some_value = xxxx

to_update_sql(post)
# => UPDATE `posts` SET `some_value` = xxx WHERE `posts`.`id` = 1
0 голосов
/ 11 мая 2018

Взято из этого поста :

Вы можете достичь этой цели с помощью AREL :

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

File.open('file_name.txt', 'w') do |file| 
  file.write(sql)
end


# 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)
sql_transaction = update_manager.to_sql

File.open('file_name.txt', 'w') do |file| 
  file.write(sql)
end

Здесь Вы можете найти всех менеджеров Arel, таких как delete_manager.rb , select_manager.rb и другие.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...