是否可以在每天的fullcalendar中设置事件限制?
我设置显示事件的限制没有问题(已经完成了),但我不知道如何对现有事件这样做。
答案 0 :(得分:0)
好的,不知怎的,我已经设法处理太多事件的创建。
首先,你必须计算某一天发生的事件并检查新的事件是否会超过你的限制,所以在你的模型中:
def daily_events_limit(date)
date.each do |d|
if Event.where('start_date <= ? AND end_date >= ?', d, d).count > 4
break false
end
true
end
然后,在你的控制器中:
def create
@event = Event.new(event_params)
if (!@event.daily_events_limit(@event.start_date..@event.end_date) )
redirect_to @event, notice: 'You cannot get free day in selected period of time.'
else
...
end
end
在这种情况下,您无法创建新事件,该事件将开始,结束或传递已有5个事件的日期。
我不知道这是一个优雅的方式来解决这个问题,但它有效:)
答案 1 :(得分:0)
通常在模型中会发生阻止类对象的创建/删除/更新的逻辑。这使您可以确保始终检查规则,而不仅仅是那个控制器中的一个实例。您可以使用验证来执行此操作:
在模特:
class Event < ActiveRecord::Base
validate :validate_event_limit
private
def validate_event_limit
if Event.where(start_date: self.start_date.beginning_of_day..self.start_date.end_of_day).count > 4
errors[:base] << "You cannot get free day in selected period of time."
end
end
end
在控制器中:
def create
@event = Event.new(event_params)
if @event.save
...
else
redirect_to @event, notice: @event.errors.full_messages
end
end
这将阻止第一个事件在一天中创建。因为您使用了验证,所以您可以使用相同的逻辑来检查可能会将事件从一天移动到另一天的更新:
def update
if @event.update(event_params)
...
else
redirect_to @event, notice: @event.errors.full_messages
end
end