0

私は頭を壁にぶつけています - ActiveRecord 内でさまざまなスコープを使用していて、うまくいくものとそうでないものがありますが、その理由がわかりません。誰かにヒント/解決策を教えてもらいたいです。すべてのスコープ ステートメントは、同じモデル - PortfolioProject 内にあります。すべてが次のように呼び出されます。

PortfolioProject.<scope name>(Time.zone.now).order('sequence')

これは機能します-毎回必ず:

scope :in_discovery, lambda {|curTime| where('sequence > 0 AND ? BETWEEN crnt_discovery_start AND crnt_discovery_finish', curTime) }

次は失敗し、エラー メッセージが表示されます。使用時間+1

scope :in_requirements, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_requirements_start AND crnt_requirements_finish', curTime) }
scope :in_tech_design, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_tech_dsgn_start AND crnt_tech_dsgn_finish', curTime) }
scope :in_development, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_development_start AND crnt_development_finish', curTime) }
scope :in_testing, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_testing_start AND crnt_testing_finish', curTime) }
scope :in_launch, lambda {|curTime|  where('sequence > 0 AND ? BETWEEN crnt_launch_start AND crnt_launch_finish', curTime) }

スコープ ステートメントの構成は、各ステートメント内で使用される列名を除いて同じです。

私が間違っているかもしれないことについての洞察に感謝します。

4

1 に答える 1

0

皆さん-問題はプログラムのスタックのさらに下にありました-Railsがエラーでトレース情報を報告しておらず、スコープステートメントにあると想定していたため、ゴーストを追跡していました。参考までに、私の最終的なスコープステートメントは次のとおりです。

scope :in_discovery, lambda{|dtCheck| active_records.where('DATE(?) BETWEEN crnt_discovery_start AND crnt_discovery_finish', dtCheck)}

チャンピオンのように機能します。

問題は、DB2データベースのdatatype TIMESTAMPのフィールドの比較を再度行っていたサブビューにありました。これはデータ型を変更できないレガシー アプリであるため、ビューで行う必要があったのは、フィールド宣言の最後に「.to_date」を追加することだけでした。

于 2012-08-30T20:12:51.270 に答える