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日志或仅仅是最后创建的所有这三个对象之一。