Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 跳过ActiveRecord发出的额外请求_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 跳过ActiveRecord发出的额外请求

Ruby on rails 跳过ActiveRecord发出的额外请求,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在rails应用程序中,我对外部数据库执行一些请求。在newrelic中,当我查看SQL请求时,我有以下几点: 2.997 718 ms SHOW FULL FIELDS FROM `whale` 3.717 721 ms SHOW VARIABLES WHERE Variable_name = 'character_set_client' 4.440 728 ms SHOW TABLES LIKE 'whale' 5.169 668 ms

在rails应用程序中,我对外部数据库执行一些请求。在newrelic中,当我查看SQL请求时,我有以下几点:

2.997   718 ms      SHOW FULL FIELDS FROM `whale`
3.717   721 ms      SHOW VARIABLES WHERE Variable_name = 'character_set_client'
4.440   728 ms      SHOW TABLES LIKE 'whale'
5.169   668 ms      SHOW CREATE TABLE `whale`
5.839   731 ms      SELECT id, `whale`.`name` FROM `whale` 
如您所见,所有请求都需要很长时间,因此我希望尽量减少它们。我只需要最后的结果

这是我的简单控制器:

class AnimalsController < ApplicationController
  def index
    MicsPix.pluck(:id, :name)
    render text: 'ok'
  end
end
class AnimalsController
我的模型是:

class MicsPix < ActiveRecord::Base
  establish_connection(:otherdb)
  def self.table_name
    "whale"
  end
end
类MicsPix
是否有一种方法可以跳过我没有使用的查询?我不一定要使用ActiveRecord。

我不确定额外的查询出现在哪里,但我有一个如何删除它们的建议

c = ActiveRecord::Base.establish_connection(
  :adapter  => "mysql2",
  :host     => "localhost",
  :username => "root",
  :password => "",
  :database => "mydatabase"
)

sql = "SELECT id, `whale`.`name` FROM `whale`"
res = c.connection.execute(sql)
然后将数据库连接重置为默认值

这段代码适用于我,我可以从外部数据库获得结果,只执行查询。当我尝试它时,我在控制器方法中这样做了,但我认为它在模型中会更整洁。据我所知,
建立连接(:otherdb)
的操作与我生成
c
时的操作相同。所以我想你可以在你的MicsPix里写这样的东西

def get_list
  sql = "SELECT id, `whale`.`name` FROM `whale`"
  connection.execute(sql)
end
这将返回和mysql res对象,该对象与数组非常相似,但不完全相同

问候
/Albin

+1自己编写sql的好例子。额外的数据库请求使AR能够获取关于数据库的元数据。大概AR的好处超过了它的成本。如果您只想执行一个简单的查询,那么您可以自己生成SQL,如Albin所示。