ruby-on-rails - Ruby:绑定(bind)在 ActiveRecord gem 中意味着什么?

标签 ruby-on-rails ruby activerecord rails-activerecord

我在很多方法中看到绑定(bind)作为参数,但没有任何文档。

例如Rails Source code

def find_by_sql(sql, binds = [], preparable: nil, &block)
  result_set = connection.select_all(sanitize_sql(sql), "#{name} Load", binds, preparable: preparable)
  column_types = result_set.column_types.dup
  columns_hash.each_key { |k| column_types.delete k }
  message_bus = ActiveSupport::Notifications.instrumenter

  payload = {
    record_count: result_set.length,
    class_name: name
  }

  message_bus.instrument("instantiation.active_record", payload) do
    result_set.map { |record| instantiate(record, column_types, &block) }
  end
end
  1. 绑定(bind) 是什么意思?
  2. 如何使用?

最佳答案

当您的 SQL 包含问号 ? 时,绑定(bind)用于替换这些标记。例如,如果您有这样的查询:SELECT * from posts where id = 3 您可以用 Ruby 编写:

Post.find_by_sql(["SELECT * from posts where id = ?", 3])

我们已将 ? 与值 3 绑定(bind)。 如果我们有更多的 ?,它们将按顺序与 binds 数组绑定(bind)。 如果 SQL 字符串中没有 ? 绑定(bind)将被忽略。

关于ruby-on-rails - Ruby:绑定(bind)在 ActiveRecord gem 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47546052/

相关文章:

ruby-on-rails - Arel AND 子句和 Empty 条件

mysql - 在 Rails 中指定连接表的条件

ruby-on-rails - 我如何知道哪些 Ruby gem 正在使用另一个 ruby​​ gem?

ruby - 尝试运行 minitest 单元测试时出错

ruby - 如何在 Ruby 中实现 "callback"?

mysql - 从三个嵌套表中选择所有行

mysql - 使用 ActiveRecord 和 MySQL 插入 DATETIME

ruby-on-rails - Ruby Hash 和 ActiveSupport HashWithIndifferentAccess 的区别

ruby-on-rails - 无法从某些位置访问 Heroku 上的 Rails 服务器

ruby - JRuby vs YARV 性能——显着差异?