2012-08-02 62 views
4

最終設法讓我的應用在特定日期下列出工作。我現在正在尋找一種方法來顯示過去30天內創建的職位。僅顯示過去30天的對象

目前我用於顯示的工作方法,坐落在一個局部的,看起來像這樣:

<% @jobs.group_by{|x| x.created_at.strftime("%d %b. %Y")}.each do |date,jobs_on_that_date| %> 

<section class="date"> 
    <%= date %> 
</section> 

<section id="top-job"> 
    <% jobs_on_that_date.each do |job| %> 
    <section id="job-wrapper"> 
     <%= link_to url_with_protocol(@link.job_url), :target => '_blank' do %> 
     <section id="job"> 
     <%= job.title %> - <%= job.company %> 
     <%= job.salary %> 
     <%= job.location %> 
     <%= job.job_type %> 
    </section> 
</section> 
<% end %> 
<% end %> 
</section> 
<% end %> 

有沒有辦法只能集成顯示過去30天的的視圖的工作或會更好在控制器中定義這個?

謝謝!

回答

14

在控制器中執行會更好。你放在視圖中的邏輯越少越好。

假設@jobs是ActiveRecord查詢的結果,@jobs = @jobs.where('created_at > ?', 30.days.ago)聽起來像是您想要的查詢。

+0

這工作完全謝謝! – 2012-08-03 09:46:18

1

我認爲最好的方法是在模型中使用範圍。然後你的控制器可以使用它。

# app/models/job.rb 
class Job < ActiveRecord::Base 
    # ... 
    scope :recent, lambda{ where(['created_at > ?', 30.days.ago]) } 
    # ... 
end 

# app/controllers/jobs_controller.rb 
class JobsController < ApplicationController 
    def show 
    @jobs = Job.recent.group_by(&:created_at) 
    end 
end 

# app/views/jobs/show.html.erb 
<% @jobs.each do |date,jobs_on_that_date| %> 

<section class="date"> 
    <%= date.strftime("%d %b. %Y") %> 
</section> 

etc... 

<% end %> 

一個稍微好一點的處理控制器&視圖的方法是:

# app/controllers/jobs_controller.rb 
class JobsController < ApplicationController 
    helper_method :recent_jobs 

    def show 
    # just render... 
    end 

    protected 

    def recent_jobs 
    @_jobs ||= Job.recent.group_by(&:created_at) 
    end 
end 

# app/views/jobs/show.html.erb 
<% recent_jobs.each do |date,jobs_on_that_date| %> 

etc... 

<% end %> 

所以沒有實例變量拷貝,你有一個很好的控制AP 我用讓你的記錄。

您也可以考慮使用裝飾器來包裝作業對象並在其中提供日期格式邏輯。