rails根据另一个字段填充模型中的字段

时间:2016-11-17 18:13:14

标签: ruby-on-rails-5

我需要按名称订购天数,我有一个名为day_name的字段的表,它是一个选择所以它只能是星期日,星期一等。

所以我想在我的表中添加另一个字段(day_order),当有人在day_name上进入星期日时,它会将day_order填充为1,当有人在day_name中输入星期一时,但我不知道如何填充day_order取决于day_name。

可能还有另一种选择,那就是当有人选择"星期天"在day_name中,存储1代替,并在读取表时再次更改它。但我也不知道怎么做。

所以我需要帮助,我试图订购一个存储日期的数组,然后尝试制作自定义订单,但我认为从模型中反过来做起来会很容易(而且更快) 。所以我可以很容易地对它进行排序。

PD:我正在查看模型中的before_save过滤器

1 个答案:

答案 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:我不需要星期天,所以它不是故意列在名单上;)