在ROR 4

时间:2015-08-11 11:13:53

标签: mysql ruby-on-rails ruby-on-rails-4 rails-activerecord mysql-5.5

有很少的例子,但是没有非常明确(或旧版本)。

我想调用MySQL程序并检查返回状态(在rails 4.2中)。我看到的最常见的方法是调用result = ActiveRecord::Base.connection.execute("call example_proc()"),但是在某些地方,人们写的是准备好的方法result = ActiveRecord::Base.connection.execute_procedure("Stored Procedure Name", arg1, arg2)(但它没有编译)。

那么调用和获取MySQL程序状态的正确方法是什么?

编辑:

如何安全地发送参数,第一个参数是整数,第二个字符串和第三个布尔值?

3 个答案:

答案 0 :(得分:1)

Rails 4 ActiveRecord::Base不支持execute_procedure方法,但result = ActiveRecord::Base.connection仍有效。即

result = ActiveRecord::Base.connection.execute("call example_proc('#{arg1}','#{arg2}')")

答案 1 :(得分:1)

您可以尝试下面的Vishnu方法

您也可以尝试

ActiveRecord::Base.connections.exec_query("call example_proc('#{arg1}','#{arg2}')")

here is the document

答案 2 :(得分:0)

通常,您应该能够针对给定模型以常规whereselect方法调用存储过程:

YourModel.where("YOUR_PROC(?, ?)", var1, var2)

关于你的评论"底线我想要事后最正确的方法验证(警告和错误)",我想它总是取决于你实际想要实现的内容以及你的可读性想要你的代码。

例如,如果要返回YourModel属性的行,那么如果将上述语句与where方法一起使用可能会更好。另一方面,如果您编写了一些sql适配器,那么您可能需要转到ActiveRecord :: Base.connection.execute级别。

顺便说一下,这里应该提到一些关于存储过程性能的东西。在几个数据库中,数据库确实在存储过程的第一次运行时存储了proc优化。但是,您传递给第一次运行的参数可能是稍后将更频繁地在其上运行的参数。因此,您的存储过程可能会在“非最佳”状态下自动优化。适合你的情况。它可能会也可能不会以这种方式发生,但在使用带有动态参数的存储过程时,您应该考虑这一点。