2016-11-17 49 views
0

我需要通过名称订购天填充场,我有一个域名为DAY_NAME一个表,它的一个选择,因此只能是周日,周一等轨道模型依赖于另一场

所以我我想到另一个字段添加到我的表(day_order),当有人进入上周日DAY_NAME它填充day_order 1,当有人在DAY_NAME进入周一,但我不知道如何填充取决于DAY_NAME的day_order。

有可能是另一种选择,它应该是当有人在DAY_NAME挑选“星期日”,存储代替1,读表的时候再次进行更改。但我不知道如何去做。

所以我需要帮助,我试图用一个数组存储日期的顺序,然后尝试进行自定义顺序,但我认为这会很容易(并且更快)以另一种方式模型。所以我可以很容易地排序。

PD:我在模型

回答

0

我解决它看before_save过滤器,

最后,我添加了一个整数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:我不需要星期天,所以它不在名单上;)