在字段验证错误中添加URL,而不会使模型复杂化

时间:2018-06-18 00:58:25

标签: ruby-on-rails validation design-patterns

我在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

1 个答案:

答案 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

您需要使用...替换实际代码。