fullcalendar - 事件的每日限制

时间:2015-11-03 16:44:56

标签: ruby-on-rails ruby ruby-on-rails-4 fullcalendar limit

是否可以在每天的fullcalendar中设置事件限制?
我设置显示事件的限制没有问题(已经完成了),但我不知道如何对现有事件这样做。

2 个答案:

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