ruby-on-rails - Rails 不允许我提前 30 天以上设置 'date' 字段 - 帮助 - Rails 3.0

标签 ruby-on-rails ruby ruby-on-rails-3

在我的 User 模型上,我有一个属性 trial_end_date

表中的列如下所示:

#  trial_end_date       :date

但是,如果我尝试将日期更改为遥远的将来,在 Rails 控制台中,会发生以下情况:

a = User.find(2)
a.trial_end_date = "2019-12-30"
=> "2019-12-30"
>> a.save
=> true
>> a.trial_end_date
=> Sat, 19 Nov 2011

WTF?为什么要这样做?我不知道为什么会这样?

即使我尝试 update_attributes(:trial_end_date => "2019-12-30") 也会发生同样的事情。

以下是我的 User 模型中与 trial_end_date 相关的所有方法:

after_validation :set_trial_end

   def has_trial_expired?
        if (self.trial_end_date <= Date.today)
            return true
        else
            return false
        end
    end

    def set_trial_end
      plan = self.plan
      end_of_trial = Date.today + self.plan.trial_duration.days
      self.trial_end_date = end_of_trial.to_date
    end

    def trial_will_almost_end?
        if (self.trial_end_date - Date.today <= 3)
            return true
        else
            return false
        end
    end

    def when_does_trial_end?
        self.trial_end_date
    end

最佳答案

马卡米利安,

您评论说您认为验证会“仅在初始用户创建时”发生。正如评论所指出的那样,如果您使用 after_validation 则不正确,但如果您使用

before_validation_on_create

(参见,例如,http://ar.rubyonrails.org/classes/ActiveRecord/Callbacks.html)

使用它会限制您的用户创建日期,但不会阻止您(或他们!小心!)以后以其他方式更改它们。

关于ruby-on-rails - Rails 不允许我提前 30 天以上设置 'date' 字段 - 帮助 - Rails 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844739/

相关文章:

ruby-on-rails - Rails + CanCan : User should be able to delete own photo, 但不能

ruby-on-rails - Ruby on Rails - 在 html.erb 中使用助手

ruby-on-rails - Unicorn 在旧版本目录中重新启动

ruby - Treetop 的 Vim 缩进文件(Ruby 解析器)

ruby-on-rails - :alert does not work; :notice does

css - 将 "Remember Me"和复选框对齐在同一行(Devise 的 CSS 问题)

ruby-on-rails - 使用 Model.update_attributes 时模型不会保存更改! Rails 3 迁移期间

ruby-on-rails - 使用 MetaSearch 在 Rails 3 中按关联进行搜索

ruby-on-rails - 在 heroku 中部署应用程序时出错

ruby-on-rails - 如何根据多对多相关模型的属性查找记录?