fullcalendar-每日事件限制



是否可以在完整日历中为每天设置事件限制
我可以设置显示事件的限制(已经这样做了),但我不知道如何为现有事件设置限制。

好吧,不知怎么的,我已经处理了太多事件的创建。

首先,你必须统计某一天发生的事件,并检查新事件是否会超过你的限制,所以在你的模型中:

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个事件的日期。

我不知道这是否是一种处理这个问题的优雅方法,但它很有效:)

通常,阻止创建/删除/更新类对象的逻辑应该发生在模型中。这样可以确保您的规则始终处于选中状态,而不仅仅是一个控制器中的一个实例。您可以使用验证来做到这一点:

型号:

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

相关内容

  • 没有找到相关文章

最新更新