【问题标题】:ruby on rails multiple tables in one modelruby on rails 一个模型中的多个表
【发布时间】:2013-08-23 07:59:33
【问题描述】:

我正在使用 Ruby on Rails,我必须创建一个从一个数据库到另一个数据库的导入器。每个数据库中有 100 多个表,我不想为每个表创建一个模型。是否有可能创建查询,指定表名?我不希望模型绑定到表。

例如:FirstDatabase.select('*').from('some_table').where(...)

没有set_table_name ...只有动态模型

我还需要在不同的表中进行插入

【问题讨论】:

  • 你需要使用rails吗?从外面可能更容易
  • 我们使用rails是因为多线程

标签: sql ruby-on-rails ruby rails-models


【解决方案1】:

我根本不会使用模型来完成这项任务。相反,请酌情使用基本连接的#select_all、#exec_insert、#exec_update 和#exec_delete 方法。

ActiveRecord::Base.connection.select_all("select * from #{table_name}")

返回行的哈希数组。

ActiveRecord::Base.connection.exec_insert("insert into #{table} (foo, bar) values(#{foo}, #{bar})

插入一行。对于您使用的任何数据库,这些值都需要正确转义字符串、日期等。

ActiveRecord::Base.connection.quote("fo'o")
=> "'fo''o'"  # When server is PostgreSQL

返回适合在 SQL 语句中使用的带引号的字符串表示。

now=Time.now
=> Fri Aug 23 02:24:40 -0700 2013

ActiveRecord::Base.connection.quote(now)
=> "'2013-08-23 09:24:40.365843'"

以 UTC 时区返回带引号的日期/时间表示。

要处理多个数据库,您可以为每个数据库设置一个模型,然后从这些模型而不是 ActiveRecord::Base 获取连接。

class TableInDbA << ActiveRecord::Base
  establish_connection "database_a_#{Rails.env}"
end

class TableInDbB << ActiveRecord::Base
  establish_connection "database_b_#{Rails.env}"
end

TableInDbA.connection.select_all("...

【讨论】:

  • 你摇滚,这太棒了!我不知道我能做到这一点。请注意,对于更长、更复杂的 SQL 字符串,包括 UNION 语句,您可以使用 %Q() 构建多行字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2011-05-18
  • 2021-08-06
相关资源
最近更新 更多