【问题标题】:before_save method #1 if method #2 == 0?before_save 方法 #1 如果方法 #2 == 0?
【发布时间】:2016-06-23 04:58:41
【问题描述】:

如果用户追溯创建了他已经accomplished 的挑战,那么before_save 如何检查days_left_challenged == 0

挑战.rb

  before_save :days_left_challenged_sets_deadline

  def days_left_challenged_sets_deadline
    if self.days_left_challenged == 0
      self.accomplished = true
    end
  end

  def days_left_challenged
    self.days_challenged - ((date_started.to_date)..Date.yesterday).count do |date| 
      committed_wdays.include? date.wday
    end + self.missed_days
  end

现在使用此代码accomplished 仍然是nil,即使用户创建了具有days_left_challenged == 0 的挑战。

【问题讨论】:

  • 你确定在你测试days_left_unchallenged返回零的情况下?此外,您确定该功能正在运行并且您的记录实际上已保存?
  • 所以它进入了if self.days_left_challenged == 0,将accomplished设置为true,但它仍然在数据库中以null结束?
  • 您希望date_started.to_date 是什么?过去还是未来?
  • 出于调试目的,将days_left_challenged_sets_deadline 中的if 语句更改为self.accomplished = days_left_challenged == 0 ? true : false,看看是否导致accomplished 被设置为false,或者它是否仍然是nil
  • 酷。而 btdubs,NULL 是 Ruby 的nil 的 SQL 等价物。我只是假设您使用的是关系数据库,而我的赌注是 sqlite 或 postgresql。

标签: ruby-on-rails ruby methods model callback


【解决方案1】:

它必须是days_left_challenged <= 0,因为我没有意识到它并没有停止在 0。菜鸟错误。

【讨论】:

  • 我几乎曾经建议过,但假设 days_challenged 减去 count 块返回的值加上missed_days 总是为零或更大。很高兴你明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多