9

最終的に、アプリに特定の日付の求人をリストすることができました。過去 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 日間分のジョブのみを表示するように統合する方法はありますか、それともコントローラーでこれを定義する方がよいでしょうか?

ありがとう!

4

2 に答える 2

25

コントローラーでやったほうがいいです。ビューに入れるロジックが少ないほど良いです。

@jobsこれが ActiveRecord クエリの結果であると仮定すると、@jobs = @jobs.where('created_at > ?', 30.days.ago)必要なクエリのように聞こえます。

于 2012-08-02T17:12:23.143 に答える
4

これを行う最善の方法は、モデルにスコープを設定することだと思います。その後、コントローラーはそれを使用できます。

# 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 があります。

デコレーターを使用してジョブ オブジェクトをラップし、そこで日付の書式設定ロジックを提供することも考えられます。

于 2012-08-02T17:14:38.163 に答える