Dean
Dean

Reputation: 425

Rails get record newest in many has_many

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

Answers (2)

bitsapien
bitsapien

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

fool-dev
fool-dev

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

Related Questions