我需要按名称订购天数,我有一个名为day_name的字段的表,它是一个选择所以它只能是星期日,星期一等。
所以我想在我的表中添加另一个字段(day_order),当有人在day_name上进入星期日时,它会将day_order填充为1,当有人在day_name中输入星期一时,但我不知道如何填充day_order取决于day_name。
可能还有另一种选择,那就是当有人选择"星期天"在day_name中,存储1代替,并在读取表时再次更改它。但我也不知道怎么做。
所以我需要帮助,我试图订购一个存储日期的数组,然后尝试制作自定义订单,但我认为从模型中反过来做起来会很容易(而且更快) 。所以我可以很容易地对它进行排序。
PD:我正在查看模型中的before_save过滤器
答案 0 :(得分:0)
我解决了,
最后,我在timetables表中添加了一个整数day_order字段。并强制要求
validates :day_order, presence: true
然后我在模型中限制了可以使用
添加到此字段的数字 def day_order_enum
[1, 2, 3, 4, 5, 6]
end
,下一步是做一个before_validation方法
before_validation :set_day_order
def set_day_order
if self.day_name == "monday"
self.day_order = 1
elsif self.day_name == "tuesday"
self.day_order = 2
elsif self.day_name == "wednesday"
self.day_order = 3
elsif self.day_name == "thursday"
self.day_order = 4
elsif self.day_name == "friday"
self.day_order = 5
elsif self.day_name == "saturday"
self.day_order = 6
end
end
最后,我通过day_order字段
对范围进行了排序 scope :day_asc_order, ->{ order('day_order ASC') }
我在列出时使用了day_asc_order。
可能这不是最好的方法,但它有效。如果有人知道更好的方法并希望分享它,我会感谢他/她。
PS:我不需要星期天,所以它不是故意列在名单上;)