У меня будет соблазн ввести этот логин в вашу модель задачи:
class Task < ActiveRecord::Base
# Returns upcoming tasks in a hash in the form:
# { :today => [ task... ], :tomorrow => [ task...], :upcoming => [ task... ], :later => [ task... ] }
def upcoming
due.group_by do |t|
if t.due_date <= Date.today
:today
elsif t.due_date == Date.tomorrow
:tomorrow
elsif t.due_date <= .days.from_now.to_date
:upcoming
else
:later
end
end
end
end
, чтобы вы могли делать такие вещи, как client.tasks.upcoming
, из любого места.Например, представление может выглядеть следующим образом:
<% tasks = client.tasks.upcoming %>
<h2>Today's tasks</h2>
<%= render :collection => tasks[:today] %>
<h2>Tomorrow's tasks</h2>
<%= render :collection => tasks[:tomorrow] %>
<h2>Next 7 days</h2>
<%= render :collection => tasks[:upcoming] %>
<h2>Later</h2>
<%= render :collection => tasks[:later] %>
В Rails 3 это будет отображать экземпляр вашего частичного _task.html.erb для каждой задачи в списке.
Точно так же вы можете вызвать этот метод из вашего .js.erb
, или вы можете вернуть его как JSON из вашего контроллера, используя .to_json
, а затем динамически отобразить его на стороне клиента.