Sql 为什么这个Rails命名的作用域返回空(未初始化?)对象?
在Rails应用程序中,我有一个模型,Sql 为什么这个Rails命名的作用域返回空(未初始化?)对象?,sql,ruby-on-rails,sqlite,activerecord,named-scope,Sql,Ruby On Rails,Sqlite,Activerecord,Named Scope,在Rails应用程序中,我有一个模型,Machine,它包含以下命名范围: named_scope :needs_updates, lambda { { :select => self.column_names.collect{|c| "\"machines\".\"#{c}\""}.join(','), :group => self.column_names.collect{|c| "\"machines\".\"#{c}\""}.join(','), :joi
Machine
,它包含以下命名范围:
named_scope :needs_updates, lambda {
{ :select => self.column_names.collect{|c| "\"machines\".\"#{c}\""}.join(','),
:group => self.column_names.collect{|c| "\"machines\".\"#{c}\""}.join(','),
:joins => 'LEFT JOIN "machine_updates" ON "machine_updates"."machine_id" = "machines"."id"',
:having => ['"machines"."manual_updates" = ? AND "machines"."in_use" = ? AND (MAX("machine_updates"."date") IS NULL OR MAX("machine_updates"."date") < ?)', true, true, UPDATE_THRESHOLD.days.ago]
}
}
但是,正如您所看到的,返回的对象的所有字段都设置为nil
生产和开发环境基本相同。两者都使用SQLite数据库。以下是为查询生成的SQL语句:
SELECT
"machines"."id",
"machines"."machine_name",
"machines"."hostname",
"machines"."mac_address",
"machines"."ip_address",
"machines"."hard_drive",
"machines"."ram",
"machines"."machine_type",
"machines"."use",
"machines"."comments",
"machines"."in_use",
"machines"."model",
"machines"."vendor_id",
"machines"."operating_system_id",
"machines"."location",
"machines"."acquisition_date",
"machines"."rpi_tag",
"machines"."processor",
"machines"."processor_speed",
"machines"."manual_updates",
"machines"."serial_number",
"machines"."owner"
FROM
"machines"
LEFT JOIN
"machine_updates" ON "machine_updates"."machine_id" = "machines"."id"
GROUP BY
"machines"."id",
"machines"."machine_name",
"machines"."hostname",
"machines"."mac_address",
"machines"."ip_address",
"machines"."hard_drive",
"machines"."ram",
"machines"."machine_type",
"machines"."use",
"machines"."comments",
"machines"."in_use",
"machines"."model",
"machines"."vendor_id",
"machines"."operating_system_id",
"machines"."location",
"machines"."acquisition_date",
"machines"."rpi_tag",
"machines"."processor",
"machines"."processor_speed",
"machines"."manual_updates",
"machines"."serial_number",
"machines"."owner"
HAVING
"machines"."manual_updates" = 't'
AND "machines"."in_use" = 't'
AND (MAX("machine_updates"."date") IS NULL
OR MAX("machine_updates"."date") < '2010-03-26 13:46:28')
选择
“机器”。“id”,
“机器”“机器名称”,
“计算机”“主机名”,
“计算机”“mac_地址”,
“计算机”“ip_地址”,
“机器”“硬盘”,
“机器”“内存”,
“机器”“机器类型”,
“机器”“使用”,
“机器”“注释”,
“机器”“正在使用”,
“机器”“模型”,
“计算机”“供应商id”,
“机器”“操作系统\u id”,
“机器”“位置”,
“机器”“购置日期”,
“机器”“rpi_标签”,
“机器”“处理器”,
“机器”,“处理器速度”,
“机器”“手动更新”,
“机器”“序列号”,
“计算机”“所有者”
从…起
“机器”
左连接
“机器更新”上的“机器更新”。“机器id”=“机器”。“id”
分组
“机器”。“id”,
“机器”“机器名称”,
“计算机”“主机名”,
“计算机”“mac_地址”,
“计算机”“ip_地址”,
“机器”“硬盘”,
“机器”“内存”,
“机器”“机器类型”,
“机器”“使用”,
“机器”“注释”,
“机器”“正在使用”,
“机器”“模型”,
“计算机”“供应商id”,
“机器”“操作系统\u id”,
“机器”“位置”,
“机器”“购置日期”,
“机器”“rpi_标签”,
“机器”“处理器”,
“机器”,“处理器速度”,
“机器”“手动更新”,
“机器”“序列号”,
“计算机”“所有者”
有
“机器”。“手动更新”=“t”
和“机器”,“正在使用”=“t”
和(MAX(“机器更新”,“日期”)为空
或MAX(“机器更新”“日期”)<'2010-03-26 13:46:28')
你知道哪里出了问题吗?这可能与发生在你身上的事情无关,但听起来很相似,所以这里是这样的:你在使用rails缓存做任何事情吗 当我尝试缓存查询结果时,得到的结果与您几乎相同(如上所述) 我找到了一个使缓存的ActiveRecords无法使用的问题——你必须在不使用缓存的AR或应用补丁和内存泄漏之间做出选择 对于非AR对象,缓存可以正常工作,因此我最终将需要的内容“转换”为整数和数组,并将其缓存
希望这有帮助 似乎是分组导致了问题。开发和生产中的数据是否相同 嗯,我不确定你是否有你认为存在的问题
[#<Machine >, #<Machine >]
?
如果这确实导致零列数据。我的下一个建议是复制生成的SQL并进入标准mysql界面,看看运行该SQL时会得到什么。。。然后将其粘贴到您上面的问题中,这样我们就可以看到。不知道,但是在
:选择和:组中,您可以只做机器。*
,否?您检查过由此生成的SQL吗?我检查过,现在我已经发布了生成的SQL。
[#<Machine >, #<Machine >]
Machine.needs_updates.each do |m|
p m.inspect
end