0

私はこれで頭を悩ませています。私はタスククラスを持っています。タスクは曜日ごとに繰り返すことができます。タスクが割り当てられたハンドラー クラスがあります。私は現在、曜日に応じてハンドラーが今日持っているタスクを表示するダッシュボードに取り組んでいます。

私のハンドラーモデルでは:

def todays_walks
    # Sunday
    if Time.now.wday == 0
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_sunday = ?', id, Time.now.beginning_of_day, true)
    end

    # Monday
    if Time.now.wday == 1
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_monday = ?', id, Time.now.beginning_of_day, true)
    end

    # Tuesday
    if Time.now.wday == 2
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_tuesday = ?', id, Time.now.beginning_of_day, true)
    end

    # Wednesday
    if Time.now.wday == 3
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_wednesday = ?', id, Time.now.beginning_of_day, true)
    end

    # Thursday
    if Time.now.wday == 4
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_thursday = ?', id, Time.now.beginning_of_day, true)
    end

    # Friday
    if Time.now.wday == 5
        Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_friday = ?', id, Time.now.beginning_of_day, true)
    end

    # Saturday
    if Time.now.wday == 6
        Task.where('handler_id = ? AND start_time >= ? AND tasktype_id = 1 AND repeat_saturday = ?', id, Time.now.beginning_of_day, true)
    end
  end

次に、私の見解では:

<h2>Your Day</h2>
<h3>Pups to walk:</h3>

<% if @handler.todays_walks.empty? %>
    <p>You have no dogs to walk today.</p>
<% else %>
    <%= render :partial => 'admin_shared/dashboard_pup', :collection => @handler.todays_walks.pup, :as => :pup %>
<% end %>

日曜日以外の曜日を強制すると、機能します。これはどういうわけか、日曜日が 0 に評価されるためだと思いますか? 私はそれを理解することはできません。

4

2 に答える 2

1

これがうまくいかない理由はわかりませんが、このメソッドをより DRY にするための簡単なリファクタリングから始めます。これを試して:

def todays_walks
  days = ["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]
  return Task.where("handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_#{days[Time.now.wday]} = ?", id, Time.now.beginning_of_day, true)
end
于 2013-10-20T19:37:25.610 に答える
0

私はそれを理解しました...ただの「当たり前」の瞬間。モデルは実際にはオブジェクトを返していませんでした。彼らは繰り返しの仕事をしていたので、他の日にはうまくいきました。

したがって、モデルで修正するには:

if Time.now.wday == 0
  return Task.where('handler_id = ? AND start_time <= ? AND tasktype_id = 1 AND repeat_sunday = ?', id, Time.now.beginning_of_day, true)
end
于 2013-10-20T19:27:56.883 に答える