ruby-on-rails - Rails - 大型数据库查询

标签 ruby-on-rails .net ruby database postgresql

假设我需要为产品目录数据库实现搜索算法。这将包括跨产品表、制造商表、库存表等的多个连接。

在 .NET/MSSQL 中,我会将此类逻辑隔离在数据库存储过程中,然后在我的 .NET 应用程序的数据访问层中编写一个包装器方法来简单地调用此存储过程。

这样的事情在 RoR 中如何运作?根据我的基本理解,RoR 默认使用它的 ORM。这是否意味着,我必须将我的搜索逻辑移动到应用层,并使用它的 ORM 编写它? SQL 存储过程非常激烈......为了性能,它需要在存​​储过程中。

这在 RoR 中如何运作?

编辑:从前两个回复中,我了解到 ActiveRecord 是在 Ruby 中做事的方式。这是否意味着可以(应该)使用 ActiveRecord 类重写需要大量连接、过滤甚至动态 SQL 的大型复杂查询的应用程序?

谢谢!

最佳答案

虽然可以在 Rails 中运行原始 SQL 语句,但使用 execute connection 对象上的方法,这样做你将失去 ActiveRecord 的所有好处。如果你仍然想沿着这条路走下去,你可以像这样使用它:

ActiveRecord::Base.connection.execute("call stored_procedure_name")

探索的另一个选择可能是创建一个“查询对象”来封装您的查询逻辑。在内部,您仍然可以使用 ActiveRecord 查询方法。 ActiveRecord 已经相当精通优化您的 SQL 查询,您仍然可以进行一些手动调整。

下面是这样一个对象的简单脚手架:

# app/queries/search_products.rb

class SearchProducts
  def initialize(params)
    @search = search
  end

  def call
    Product.where(...) # Plus additional search logic
  end
end

第三种选择是使用类似 elasticsearch-rails 的东西或 sunspot .这将需要一些额外的设置时间并增加复杂性,但如果您的搜索要求发生变化,最终可能会有所返回。

关于ruby-on-rails - Rails - 大型数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680908/

相关文章:

ruby-on-rails - Rails fixtures 和命名空间模型 - ActiveRecord::Fixture::FixtureError

ruby-on-rails - Rails 和 Heroku : How many workers/dynos do I need

.net - 显示 “you have crashed, we are sorry …”弹出窗口时完全停止应用程序

.net - 如果程序集被添加到 GAC 中,它引用的所有程序集是否也需要添加到那里?

ruby - 在 OS X 上轻松编辑和运行 Ruby

ruby-on-rails - JRuby/基本 PostgreSQL 连接

ruby-on-rails - 如何使用相同的键在Rails中接受多个URL参数?

mysql - Rails - 公寓 gem - 公共(public)和租户数据库的不同模式

ruby-on-rails - Ruby on Rails,找不到有效的 gem 'rails'

c# - .NET 等同于 Java FileChannel?