2

我在 rails 3.2.6 中使用带有 activerecords 的 mysql2 适配器

我想在进行原始插入时使用绑定变量。我不能使用常规模型,因为我正在插入到选择中。

就像是:

insert into t(col1, col2)
select ?, c
from t1
where t1.x = ?

我是 Rails 的新手,很惊讶做到这一点有多难。我知道这不是使用模型类等的常规 rails 约定。出于性能和安全原因,我想使用绑定变量。理想情况下,我不想使用如何使用 Rails 中的动态绑定执行原始更新 sql中指定的 raw_connection

4

1 回答 1

1

尝试这个:

query = <<-SQL
insert into t(col1, col2)
select ?, c
from t1
where t1.x = ?
SQL

col1 = Model.columns.find{|x| x.name == 'col1'}
col2 = Model.columns.find{|x| x.name == 'col2'}

ActiveRecord::Base.connection.insert(query, nil, nil, nil, nil, [[col1, col1_value], [col2, col2_value]])

我如何进行绑定的来源: https ://github.com/rails/rails/blob/master/activerecord/test/cases/bind_parameter_test.rb

我如何进行插入的来源:http: //api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-insert

于 2012-07-23T11:56:55.920 回答