在 Rails 中使用 date_select 和丢弃年份时保持日期顺序?
Posted
技术标签:
【中文标题】在 Rails 中使用 date_select 和丢弃年份时保持日期顺序?【英文标题】:Keeping dates in order when using date_select and discarding year in Rails? 【发布时间】:2010-03-13 11:03:29 【问题描述】:我的应用中的用户拥有季节性产品。当用户选择产品时,我们允许他同时选择产品的季节。为此,我们让他为每个产品选择开始日期和结束日期。
我们使用date_select
生成两组下拉菜单:一组用于开始日期,一组用于结束日期。
包含年份对我们的模型没有意义。所以我们使用选项:discard_year => true
为了解释我们的问题,假设我们的产品是苹果。供应商 X 每年从 9 月到 1 月运送苹果。年份在这里无关紧要,这就是我们使用discard_year => true
的原因。然而,虽然具体年份无关紧要,但从开始日期到结束日期的相对时间点是相关的。这就是我们的问题出现的地方。
当您使用discard_year => true
时,Rails 确实在数据库中设置了年份,只是不会出现在视图中。 Rails 在我们的应用程序中将所有年份设置为 0001。回到我们的苹果示例,这意味着数据库现在认为用户选择了 0001 年 9 月到 0001 年 1 月。这对我们来说是个问题,原因有很多。
为了解决这个问题,我需要实现的逻辑如下:
如果 season_start 月/日在数字上在 season_end 月/日之前,那么标准 Rails 方法就可以了。
1234563用户选择 10 月 15 日到 1 月 15 日,他打算是 0001 年 10 月 15 日到 002 年 1 月 15 日。我需要应用程序来反映这一点。我最好的猜测是,我会创建一个自定义方法,在我的产品模型中以after_save
或after_update
运行。但我不确定如何做到这一点。
想法?有人遇到过这个问题吗?谢谢!
【问题讨论】:
【参考方案1】:在您的 Product
模型中添加 before_save
回调。
class Product < ActiveRecord::Base
before_save :fix_end_date
def fix_end_date
self.end_date +=1.year if start_date > end_date
end
end
【讨论】:
谢谢。这似乎是对的。现在正在实施,并会在我开始工作时确认。以上是关于在 Rails 中使用 date_select 和丢弃年份时保持日期顺序?的主要内容,如果未能解决你的问题,请参考以下文章