9

2 つの日付の間の値のみを選択するスコープを Rails に設定したいと考えています。

これが私の例です:

属性「 startDate」と「endDate 」を持つモデルがあります。どちらも「日付」タイプです

ここで、これら 2 つの日付の間にある今日のすべてのエントリを選択したいと考えています。

こんな感じのスコープを作りました。

class Product < ActiveRecord::Base
  scope :activeDate, -> { where("? >= ? AND ? <= ?", Time.now.to_date, :saleStartDate, Time.now.to_date, :salesEndDate)}

コントローラーで:

@products = Product.activeDate

残念ながら、うまくいきません。すべてのエントリを取得するためのレールウェイ (より美しい) はありますか?

どうもありがとう。

4

1 に答える 1

21

あなたはこれを行うことができます:

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Time.now.to_date)}

greater or equal AND lesser or equalを使用しているため、同等の SQL 関数「BETWEEN」を使用できます。

Time を日付に変換する必要はありません。Date.today を直接呼び出すことができます。

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Date.today)}

これを行うことで、スコープを改善できます。

scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN startDate AND endDate", date) }

そして、次のように使用します。

Product.activeAtDate() #=> use the Date.today
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days
于 2013-09-06T15:56:51.130 に答える