Reputation: 425
I have some model like this:
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
Now, i want get one newest record in :call_logs
, :send_email_logs
, :send_sms_logs
. How can i do that???
Upvotes: 0
Views: 62
Reputation: 1833
You can try doing this -
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
A single query alternative would be to do this -
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
Upvotes: 1
Reputation: 7777
You can try like below:
LogActivity.joins(:call_logs, :send_email_logs, :send_sms_logs).where(log_activity_id: 1 or something)
For more explanation, you can look the rails guide link
Thanks
Upvotes: 0