Mongoid 检查文档更新的相交时间范围
Mongoid check intersecting time frames on document update
我想检查文档更新的时间范围是否与另一个时间范围相交。它适用于创建,但我无法更改任何内容。
这是我目前拥有的:
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 是否与我正在更新的 id 不同。我也尝试了另一个查询但没有成功:
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。
谢谢。
我觉得你的逻辑可能有问题。您的代码测试新的时间跟踪 是否在 现有时间跟踪内,而不是它是否重叠。
那么,你有两种可能。我想你需要一个 or 语句:
- 它在另一个 Timetracking 的
begin
和 end
or 之间开始
- 它在另一个 Timetracking
begin
和 end
之间结束
另外,我建议你写一些规范。这将使查看正在发生的事情变得容易得多。
以下说法不正确。它永远是错误的:
Timetracking.find(params[:id]) != params[:id]
你想要这样的东西:
Timetracking.where(:begin.lt ..., :id.ne => params[:id])
我想检查文档更新的时间范围是否与另一个时间范围相交。它适用于创建,但我无法更改任何内容。
这是我目前拥有的:
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 是否与我正在更新的 id 不同。我也尝试了另一个查询但没有成功:
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。
谢谢。
我觉得你的逻辑可能有问题。您的代码测试新的时间跟踪 是否在 现有时间跟踪内,而不是它是否重叠。
那么,你有两种可能。我想你需要一个 or 语句:
- 它在另一个 Timetracking 的
begin
和end
or 之间开始
- 它在另一个 Timetracking
begin
和end
之间结束
另外,我建议你写一些规范。这将使查看正在发生的事情变得容易得多。
以下说法不正确。它永远是错误的:
Timetracking.find(params[:id]) != params[:id]
你想要这样的东西:
Timetracking.where(:begin.lt ..., :id.ne => params[:id])