I want to cache objects only if they were published at least 5 days ago.
He is the code I’ve done, but I don’t like because it is not dry…
How could I improve it?
I want to cache objects only if they were published at least 5 days ago.
He is the code I’ve done, but I don’t like because it is not dry…
How could I improve it?
<% if job.published_at < 5.days.from_now %>
Is that not testing for before 5 days in the future rather than 5 days
ago?
<% end %>
In terms of DRYness you could perform the test and cache or otherwise
and set a variable to the text for published_at, then output the
title, location and pre-determined text. Still not very pretty
though.
How about something like this:
<% if job.published_at > 5.days.ago %> #credit to Colin for catching
this
<%= render :partial => “job” %>
<% else %>
<% cache job %>
<%= render :partial => “job” %>
<% end %>
<% end %>
_job.html.erb
<%= job.title %>
<%= job.location %>
<%= job.published_at %>
I’d also look at turning the logic on that first line into a method
def recently_published?
job.published_at > 5.days.ago
end
In the OPs original post he has two ways of rendering job.published_at.
For the case where it is recent
<%= distance_of_time_in_words(DateTime.now, job.published_at) %>
and otherwise just
<%= job.published_at %>
If you make the requirement to be always cached or never cached then I
see us having more options.
#the partial can worry about how to render itself; keep the main view
clean.
<%= render :partial => “job” %>
_job.html.erb – you could optionally wrap this in in a cache block
<%= job.title %>
<%= job.location %>
<%= job_time(job) %>
<%= job.published_at %>
#job_helper.rb
def job_time(job)
if job.published_at > 5.days.ago
distance_of_time_in_words(DateTime.now, job.published_at)
else
job.published_at
end
end
Luke
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.