在使用date_select并在Rails中丢弃年份时按顺序保留日期?
我的应用拥有季节性产品的用户。 当用户选择产品时,我们允许他也选择产品的季节。 我们通过让他为每个产品选择开始日期和结束日期来实现这一目标。
我们使用date_select
生成两组下拉菜单:一组用于开始日期,一组用于结束日期。
包括年份对我们的模型没有意义。 所以我们使用的选项: discard_year => true
要解释我们的问题,请考虑我们的产品是苹果。 供应商X每年从9月到1月运送苹果。 岁月与此无关,这就是我们使用discard_year => true
。 但是,虽然具体年份无关紧要,但从开始日期到结束日期的相对时间点是相关的。 这就是我们的问题出现的地方。
当你使用discard_year => true
,Rails确实在数据库中设置了一年,它只是没有出现在视图中。 Rails在我们的应用程序中将所有年份设置为0001。 回到我们的苹果示例,这意味着数据库现在认为用户已经选择了0001年1月到1月1月。由于多种原因,这对我们来说是一个问题。
要解决这个问题,我需要实现的逻辑如下:
-
如果season_start月/日在season_end月/日之前是数字,那么标准的Rails方法就可以了。
-
但是,如果season_start月/日在season_end月/日之后是数字,那么我需要动态更新数据库字段,使得season_end的年份等于season_start + 1的年份。例如,如果用户选择10月15日到1月15日,他的意图是0001年10月15日至2000年1月15日。我需要该应用程序来反映这一点。
我最好的猜测是我会创建一个自定义方法,在我的产品模型中作为after_save
或after_update
运行。 但我不确定如何做到这一点。
想法? 有没有人遇到过这个问题? 谢谢!
在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
- 如何添加指向ActiveAdmin视图的链接
- Ubuntu虚拟环境上的自动测试通知
- OSX Mavericks之后无法加载此类文件 – 脚本/../config / boot(LoadError)
- 创建Blueprint API doc时如何在URL中格式化基于哈希的参数?
- 会话到期时,购物车对象会发生什么?
- 启用turbolinks重新渲染特定的js文件
- Rails collection_select:选中“blank”选项时保存null而不是空字符串
- 不兼容的字符编码:ASCII-8BIT和UTF-8,同时在rails中使用javascript
- Rspec:PG :: ConnectionBad:PQsocket()无法获取套接字描述符