2015-11-03 87 views
0

是否有可能在每天的fullcalendar中设置事件限制?
我没有问题设置显示事件的限制(已经这样做),但我不知道如何为现有事件做到这一点。fullcalendar - 事件的每日限制

回答

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 ([email protected]_events_limit(@[email protected]_date)) 
     redirect_to @event, notice: 'You cannot get free day in selected period of time.' 
    else 
     ... 
    end 
end 

在这种情况下,您无法创建新事件,该事件将以5个事件开始,结束或传递日期。

我不知道这是否是一种优雅的方式做处理这个问题,但它的工作原理:)

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