2016-07-11 4 views
1

文書の更新時に他のものと時間枠が交差しているかどうかを確認したい。それは創造に作用しますが、私は何かを変えることに問題があります。文書の更新時に交差する時間枠を確認する

これは私がこれまで持っているものです。

if Timetracking.where(:begin.lt => params[:timetracking][:end], :end.gt => params[:timetracking][:begin]) && Timetracking.find(params[:id]) != params[:id] 
    @error = 'Time overlapping with another entry' 
    render 'timetracking/edit' 
else 
    do update stuff 
end 

私の基本的な考え方は、時間が重複し、idは私が更新しています1以外の何かである場合かどうかを確認することでした。私も成功なしに別のクエリを試しました:

if Timetracking.where(:begin.lt => params[:timetracking][:end], :end.gt => params[:timetracking][:begin], :id.ne => params[:id]) 
    @error = 'Time overlapping with another entry' 
    render 'timetracking/edit' 
else 
    do stuff 
end 

今私はちょっと立ち往生しています。たぶん誰かが私を正しい方向へ押し込んでくれるかもしれない。 :)ああ、私はPadrinoを使用しています。

ありがとうございます。

答えて

0

あなたのロジックに誤りがあると思います。コードでは、新しいTimetracking が、重複するかどうかではなく、既存のものであるかどうかをテストします。

したがって、2つの可能性があります。私はあなたがまたはステートメントが必要になると思う:

  1. それはまた

別Timetracking beginend間を終了し、別のTimetrackingの beginend または
  • の間で開始し、私はあなたを示唆しますいくつかの仕様を書いてください。何が起こっているのかを見るのがはるかに簡単になります。

    以下は正しくありません。それは常にfalseになります。

    Timetracking.find(params[:id]) != params[:id] 
    

    あなたが何かしたい:

    Timetracking.where(:begin.lt ..., :id.ne => params[:id]) 
    
  • +0

    はどうもありがとうございました。 OR文で問題を解決しました。今は期待どおりに動作します。 EDIT:私はコメントで書式を設定するにはあまりにも愚かであるように見えます。 :) – BlindPenguin

    関連する問題