Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Ruby:宝石经验,用于重复的日历事件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想为我的项目找到一个红宝石宝石,使用与以下要求相符的事件: @H_696_2@>可以处理模式,如“周二周二和周三”,或“上周二的每月”
>可以计算下一次发生
>可以将模式序列化/反序列化为字符串以存储在数据库
>序列化具有稳定的格式(即使升级后也能加载)
>至少使用以下模式组件:时间,星期几,月的日期,月的第n个星期;
>可以每天,每周,每月或间隔n天,几周或几个月重复
>可以代表自然英语语言的模式
>可以从英语解析模式(可选)
>可以导出为一些流行的格式,如iCal(可选)
>可以与其他宝石/系统集成用于日历和任务管理(可选)
>支持Active Record – 参数解析,验证(可选)
>有足够的测试,几个bug,多1个用户:)
>性能合理

@H_696_2@我找到了两个相关的候选人:

@H_696_2@痒痒 – 好可以解析英语.
> Ice_Cube(schedule-Attributes) – 最好的是它最流行,可以导出到iCal

@H_696_2@你能建议一个宝石,并描述积极和消极的经验吗?

@H_696_2@也许你可以添加一些相关的标准/要求,我没有提到.

@H_696_2@附:用15K的叮叮叮叮叮叮叮叮叮….谢谢

解决方法

我最终使用 Ice_Cube,原因如下: @H_696_2@> Most popular
>可以计算下一次发生
>可以将模式序列化/反序列化为字符串以存储在数据库
>序列化具有稳定的格式(即使升级后也能加载)
>至少使用以下模式组件:时间,几周或几个月重复
>可以从英语解析模式(可选)
>可以导出为一些流行的格式,如iCal(可选)

@H_696_2@这些对我的标准没有充分说明:

@H_696_2@>可以代表自然英语语言的模式
>支持Active Record – 参数解析,验证(可选)

@H_696_2@这个没有验证:

@H_696_2@>性能合理

@H_696_2@使用Rails中的用户输入创建Ice_Cube :: schedule不是很方便,但可行:

class EntryForm < FormModel

  include IceCube
  class_eval &ValidatesTimelinessSupport[{:start_date => :datetiR_723_11845@E}]

  Units = [Day = 'day',Week = 'week']
  Intervals = %w[0 1 2 3 4 5 6 7 8 9]
  Week_Days = [:sunday,:monday,:tuesday,:Wednesday,:thursday,:friday,:saturday]

  Days_With_Letters = Week_Days.zip(%w[S M T W T F S])

  attr_accessible_accessors :interval,:unit,:start_date
  attr_accessible_accessors *Week_Days

  def_delegators :@model,:display_title,:schedule_yaml,:schedule_yaml=

  validates_date :start_date,:allow_blank => true
  validates_inclusion_of :unit,:in => Units
  validates_inclusion_of :interval,:in => Intervals
  validates_inclusion_of :complete,:in => %w[0 1],:allow_blank => true
  Week_Days.each { |day| validates_inclusion_of day,:allow_blank => true }

  before_edit {
    if not schedule_yaml.blank? and hash = YAML::load(schedule_yaml)
      schedule = schedule.from_hash(hash)
    end

    if schedule and rule = schedule.rrules.first
      @start_date = schedule.start_date

      rule_hash = rule.to_hash
      @interval = rule_hash[:interval]

      case rule
      when DailyRule
        @unit = Day
      when WeeklyRule
        @unit = Week
        rule_hash[:validations][:day].try :each do |day_index|
          send "#{Week_Days[day_index]}=",1
        end
      end

    else
      @start_date = Date.today
      @interval = 1
      @unit = Day
    end
  }

  before_save {
      sd = @start_date.blank? ?
          Date.today.to_all_day :
          @start_date.parse_date_in_timezone
      i = @interval.to_i
      schedule = schedule.new(sd)


      rule = case @unit
        when Day
          Rule.daily i
        when Week
          Rule.weekly(i).day(
            *Week_Days.
            SELEct { |day| send(day).to_i == 1 } )
      end

      schedule.add_recurrence_rule(rulE)

      self.schedule_yaml = schedule.to_yaml
    end
  }
end

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Ruby:宝石经验,用于重复的日历事件?全部内容,希望文章能够帮你解决ruby-on-rails – Ruby:宝石经验,用于重复的日历事件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。