スコープでDateTime.parseを使用して文字列を時刻に変換しようとしていますが、未定義のローカル変数エラーが発生します。
スコープ内のフィールドを変換することは可能ですか、それとも他のことを試す必要がありますか?
私のスコープ:
scope :time_range, lambda {
a = DateTime.parse(start_time_am)
where("#{a} <= ?", Time.now.strftime('%H'))
}
- アップデート -
これをいじってみたところ、おそらくデフォルトのアクセサーを上書きする必要があることがわかりました。私は今次のものを持っています:
def start_time_am
read_attribute(:start_time_am).strftime("%H%M").to_i
end
コンソールでは、start_time_amフィールドは次のようになります。
Promotion.last.start_time_am
=> 430
ただし、新しいフィールドを一時的に定義して、最初のフィールドを引き続き使用できるようにしたい場合。
コンソールでこれにアクセスできますが、検索時にはアクセスできません。例えば。
def start_time_new
read_attribute(:start_time_am).strftime("%H%M").to_i
end
def self.time_range
time = Time.now.strftime('%H%M').to_i
where("start_time_new <= ?", time)
end
不明な列エラーが発生します。attr_readerで解決できると思いましたが、機能していません。
ありがとう