如何使用`exec_insert`方法?

时间:2012-05-16 05:56:35

标签: mysql ruby-on-rails ruby database ruby-on-rails-3

我正在使用Ruby on Rails 3.2.2并运行以下原始SQL:

sql = "INSERT INTO articles (`title`, `user_id`) VALUES #{inserts.join(", ")}"
ActiveRecord::Base.connection.execute(sql)

但是,我想使用Ruby on Rails exec_insert方法,但没有关于它的好文档。那么,我如何使用exec_insert方法来制作我上面提到的相同的东西(可能使用像Article.connection.exec_insert(...)这样的东西)?

2 个答案:

答案 0 :(得分:0)

您可以为此使用exec_query

ActiveRecord::Base.connection().exec_query('INSERT INTO articles(title, user_id) VALUES($1, $2)', 'someQueryName', [[nil, title], [nil, user_id]])

请注意,我已经使用并测试了$ 1,$ 2 仅用于Postgres ,因为$ 1,$ 2是用于绑定postgres中的prepare查询的约定。

对于MySql和其他数据库,可能有所不同。对于Mysql,我认为应该是?而不是$ 1,$ 2等,这取决于数据库如何提供绑定

另外,您可能需要为某些设置prepare_query: true。请参阅-http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#exec_query

答案 1 :(得分:-1)

exec_insert是一种内部方法,可能不是你想要的。你有什么应该没事。

如果您真的开始使用它,并且需要示例,那么测试套件可能是找到它们的最佳位置。一个例子是here