Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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创下了多项最新纪录_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails创下了多项最新纪录

Ruby on rails Rails创下了多项最新纪录,ruby-on-rails,Ruby On Rails,我有一些这样的模型: class LogActivity < ActiveRecord::Base has_many :call_logs has_many :send_email_logs has_many :send_sms_logs ... end class CallLog < ActiveRecord::Base belongs_to :log_activity end class SendEmailLog < ActiveRecor

我有一些这样的模型:

class LogActivity < ActiveRecord::Base
   has_many :call_logs
   has_many :send_email_logs
   has_many :send_sms_logs
   ...
end

class CallLog < ActiveRecord::Base
   belongs_to :log_activity
end

class SendEmailLog < ActiveRecord::Base
   belongs_to :log_activity
end

class SendSmsLog < ActiveRecord::Base
   belongs_to :log_activity
end
类日志活动

现在,我想在
:call\u logs
:send\u email\u logs
:send\u sms\u logs
中获得一条最新记录。我该怎么做呢?

你可以试着这样做-

newest_call_log       = LogActivity.call_logs.last
newest_sent_email_log = LogActivity.send_email_logs.last
newest_sent_sms_log   = LogActivity.send_sms_logs.last
一个单一的查询替代方案就是这样做-

newest_log = LogActivity.eager_load(:call_logs, :send_email_logs, :send_sms_logs).last
# The above will fire a query and fetch all the data you need, the below lines will segregate your data
newest_call_log       = newest_log.call_logs.last
newest_sent_email_log = newest_log.send_email_logs.last
newest_sent_sms_log   = newest_log.send_sms_logs.last

您可以尝试以下方法:

LogActivity.joins(:call_logs, :send_email_logs, :send_sms_logs).where(log_activity_id: 1 or something)
要了解更多说明,您可以查看rails


谢谢

使用3个查询获取,我想要1个查询T。T@To他使用了3个查询,但都很有效。您可以通过
ruby
code轻松比较这3个返回值以获得最新的值。您仍然可以在1个查询中获得它们,但除非您在3个日志表上使用STI,否则效率不高。我已更新了答案,以符合您的要求,希望能有所帮助。根据您的用例,您应该考虑STI样的“YEUM1VANAM建议”,它将给出所有三个对象I. CalthLogScript、SeDyMeMayLyScript、sEndSmithS日志或仅仅是最后创建的所有这三个对象之一。