我在Rails中的一个模型验证是确保事件不与另一个事件重叠。我通过比较已经存在的记录的日期来做到这一点。
如果检测到重叠,我会显示验证错误:
重叠事件:ABC会议--- 6月1日至6月17日
try {
$socialite = Socialite::driver($provider)->user();
} catch (InvalidStateException $e) {
$socialite = Socialite::driver($provider)->stateless()->user();
}
通常,在这个用例中,需要通过编辑现有事件而不是新事件来解决错误,所以我想添加一个验证消息的链接,以便用户只需单击它即可转到存在重叠的事件。
是否有用于添加该验证链接的Rails模式?
向模型添加链接助手似乎不对,但在关注MVC分离时,还有其他方法可以做得更好吗?
这应该以不同的方式构建,以便视图可以根据需要添加链接吗?
当然,在模型中写这个很好:
class Event < ApplicationRecord
# ...
validate :prevent_overlaps
private
def prevent_overlaps
# ... detect overlap here
if overlap.present?
errors.add :start_date, "Overlaps with event: #{overlap_event.title} --- #{overlap_event.start_date} - #{overlap_event.end_date}"
end
end
end
答案 0 :(得分:0)
验证后,重定向将在控制器而不是模型中发生。
这样的事情:
if @event.save
...do something...
else
...if start_date error validatio error exist...
...find the other event...
...redirect_to other event edit path...
end
您需要使用...
替换实际代码。