首页 > 解决方案 > 创建现场 ActiveRecord::Relation 替代品

问题描述

我们有一种情况,我们发现自己需要使用 ActiveRecord 工具来查询表,但我们不想为这些表创建长期存在的或“全局”类。例如,我们真的需要做类似的事情

from_table(table_name).find_in_batches do |row|
   ...

到目前为止,我想出的是:

def temporary_model_class_for_table(table_name)
  Class.new(ActiveRecord::Base) do
    self.table_name = table_name
  end
end

这允许我们执行以下操作:

temporary_model_class_for_table('widgets').where(id: 1)

它返回返回的匿名类的实例temporary_model_class_for_table。但我想知道是否有更清洁的方法可以做到这一点。也许使用 Github 的 SQL gem 之类的东西或直接访问结果集?另一方面,像find_in_batches/这样的东西find_each是 ActiveRecord 部分,而不是 Arel 部分,因此可能需要完整的(大量)ActiveRecord API。

有没有更清洁的方法来做到这一点?

标签: rubyactiverecordarel

解决方案


推荐阅读