Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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 缩短rails中的长SQL日志条目_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 缩短rails中的长SQL日志条目

Ruby on rails 缩短rails中的长SQL日志条目,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在进行不同的查询,如下所示: Offer.where("id IN (?) AND foo = ?", offer_ids, 'bar') 其中,计算了offer_id,其长度约为1.000 id 这会导致development.log中出现很长的条目,如: Offer Load (12.9ms) SELECT `offers`.* FROM `offers` WHERE (id IN (156439476,162525730,169378363,197193532,209583012,

我正在进行不同的查询,如下所示:

Offer.where("id IN (?) AND foo = ?", offer_ids, 'bar')
其中,计算了offer_id,其长度约为1.000 id

这会导致development.log中出现很长的条目,如:

Offer Load (12.9ms)  SELECT `offers`.* FROM `offers` WHERE (id IN (156439476,162525730,169378363,197193532,209583012,212783238,236381946,260584008,267542041,140892256,154059101,157130091,158223924,161242255,161410617,169374703,184305303,187582050,234519939,235460328,252011721,253958427,257583669,260506433,262371001,262925076,265363980,266580943,268164854,271348458,272595168,272965063,141293866,162515580,195738185,210118609,210183244,210783954,212896682,219931290,224907551,225764370,227558502,234479337,234536939,236329414,238409428,241871979,245480324,245491111,245507734,253281480,254462074,257921737,265282309,265542934,266584572,267530034,268798204,271548316,272761011,272899348,273012205,119125136,134552742,166766466,169187658,213728958,213732981,225761919,234827176,247156634,247196151,247214973,247659810,259275332,261664338,262780711,267516898,267741935,270442768,271445586,271630463,272560287,272643405,272957626,106364954,205619149,213425974,213731373,243644164,266104747,266428301,266947751,268013142,126413832,157986541,175322047,204080600,205821543,205821564,205830753,205848558,207430869,207442535,207458847,207952331,208122137,213731142,217001805,226506891,228735112,243682190,257949941,265512977,265908636,268833366,269372138,270447643,271237573,59037247,59169923,662 ...) AND foo = 'bar')
我实际上对这些日志条目感兴趣,但对特定的ID不感兴趣,滚动这些长条目会减慢我的优化速度

是否有一种gem或简单的方法可以像mysql慢速查询日志那样减少日志:

Offer Load (12.9ms)  SELECT `offers`.* FROM `offers` WHERE (id IN (?) AND foo = ?)

我不知道如何更改日志。但是,如果您使用的是最新版本的rails,则可以使用子查询,这可能是防止长行日志记录的一种方法

比如说,

如果您目前有:

offer_ids = @business.offers.map(&:id) # this is an array object
Offer.where("id IN (?) AND foo = ?", offer_ids, 'bar')
您可以将代码重构为:

offer_ids = @business.offers # this is an ActiveRelation object
# offer_ids = @business.select(:id).offers # you can use this line instead of above line

Offer.where(:id => offer_ids, :foo => 'bar')
在这种情况下,您将得到如下查询:

SELECT `offers`.* FROM `offers` WHERE (id IN (SELECT id FROM `offers` WHERE business_id = 4) AND foo = 'bar')
区别在于传递的是
数组
对象还是
活动关系
对象


ActiveRelation
对象是当您使用诸如
where
select
limit
等尚未执行查询的查询方法时得到的对象。在这种情况下,请注意不要使用诸如
count
maximum
all
或任何其他数组方法(例如
map
select
)之类的方法,这些方法将强制运行查询,从而生成一个
array
,这肯定会帮助我进行一些查询。我必须用ruby进行一些id计算,但对于其他的,这是一个很好的提示。非常感谢。