ruby-on-rails - ActiveRecord 的 find 方法是否会在其参数上自动调用 to_i?

标签 ruby-on-rails ruby activerecord

我得出的结论是 ActiveRecord 会根据其参数自动调用 to_i,但如果有人可以确认,尤其是通过对某些文档的引用,我将不胜感激。

下面的代码示例最好地说明了我得出结论的方式:

dest_task = WorkEffort.find(params[:task_dest_id])

params[:task_src_ids].split.each do |src_id|
    WorkEffort.find(src_id).move_to_child_of dest_task
end

当我运行上面的代码时,虽然我知道 task_src_ids 参数包含诸如“78,79”之类的内容,但只处理了与第一个 src_id 关联的记录。仔细想想,find 一定是在该字符串上调用 to_i,它将忽略第一个非数字后的所有内容并返回 78。

如果 find 没有调用 to_i 应该会导致错误,我将不得不显式调用 to_i。当然,我通过调用“split(',')”修复了代码,现在它处理多个 task_src_id,而不仅仅是第一个逗号之前的那个。

我知道我自己已经回答了这个问题,但作为一个 Ruby/Rails 新手,我正在寻找确认和相关文档的链接,而且我认为它可以在未来帮助其他人。提前致谢

最佳答案

[用activerecord-2.3.14代码回答这个问题,因为你没有指定版本。]

最终,您的值将通过 Quoting#quote 方法运行。我已经在此处粘贴了它的开头,正如您在第 15 行开始的 block 中看到的那样,当您的列类型为 int 时,它将最终调用 .to_i关于传入的值。

  1 module ActiveRecord
  2   module ConnectionAdapters # :nodoc:
  3     module Quoting
  4       # Quotes the column value to help prevent
  5       # {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
  6       def quote(value, column = nil)
  7         # records are quoted as their primary key
  8         return value.quoted_id if value.respond_to?(:quoted_id)
  9           
 10         case value
 11           when String, ActiveSupport::Multibyte::Chars
 12             value = value.to_s
 13             if column && column.type == :binary && column.class.respond_to?(:string_to_binary)
 14               "'#{quote_string(column.class.string_to_binary(value))}'" # ' (for ruby-mode)
 15             elsif column && [:integer, :float].include?(column.type)
 16               value = column.type == :integer ? value.to_i : value.to_f
 17               value.to_s
 18             else
 19               "'#{quote_string(value)}'" # ' (for ruby-mode)
 20             end

关于ruby-on-rails - ActiveRecord 的 find 方法是否会在其参数上自动调用 to_i?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531061/

相关文章:

ruby - 从 ActiveRecord 迁移中输出 SQL 而不执行它(不是 rails!)

ruby-on-rails - 我如何探索 ActiveRecord 关系的结果?

ruby-on-rails - 了解 Rails 实例变量

ruby-on-rails - 查找死轨代码

javascript - 使用 JavaScript 捕获视频和音频

ruby-on-rails - Controller 操作中的 Rails 自动保存关联

javascript - RequireJS 连接 JS 但不缩小

ruby - 如何模拟 Ruby 模块函数?

ruby - Sidekiq 队列权重限制

ruby-on-rails - 未初始化的常量 ActiveSupport::Concern