【问题标题】:How can i use complex direct query instead of activerecord in a rails application?如何在 Rails 应用程序中使用复杂的直接查询而不是 activerecord?
【发布时间】:2018-08-24 06:17:50
【问题描述】:

我有一个 Rails 应用程序,它有一个函数可以像这样使用活动记录从数据库中读取值

def get_all_products
 products = Product.for_locations(location_id)
 products.includes(:a, { b: [:c]}, {d: [:e]}, :f).each do |product|  
   product_forms = product.product_forms.sort_by{ |a| a[:sequence_no] } 
   .......
   .......
 end
end

上述函数需要一些时间来处理,因此它作为后台作业运行。现在我想将这部分移动到一个单独的 Rails API 应用程序中,以便处理并将该数据放入数据库中,但是这个新应用程序没有任何模型和所有模型,所以我如何在新的函数中使用相同的函数 get_all_products rails API应用,因为没有model,所以无法使用active-record来获取数据,即使使用直接查询,也有点复杂,有什么方法可以实现吗?

【问题讨论】:

  • 您应该使用您的database-adapater gem,并且可能尝试将establish connection 与数据库一起使用并从中读取表和数据。

标签: ruby-on-rails ruby-on-rails-3 orm rails-activerecord


【解决方案1】:

我的意思是你需要做这样的事情 你需要先建立连接

connect = ActiveRecord::Base.establish_connection(
  :adapter => 'mysql2',
  :host => "localhost",
  :database => 'local_db'
)

sql_query = "your_query"
query_result = connect.connection.execute(sql_query)
query_result.to_a

【讨论】:

  • 是的,我们可以这样做,但是我的 sql 查询很复杂,并且依赖于许多其他表,更多的连接,排序,组......当我们使用活动记录时,我们可以获取关联的来自该活动记录对象的模型,我们可以做任何我们想要的循环,那么有什么相同的方式吗?
  • @django 在 Rails 控制台中构建您的查询,然后对其调用 to_sql 以查看您最终构建的 SQL,然后将其提供给 connection.execute
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多