如何

2014-10-02 126 views
0

我設計的應用程序,爲學生和分類,類別包括如何

Level 100 
Level 200 
Level 300 
Level 400 
Level 500 

每個用戶都屬於我想這是什麼類別

的只有一個自動upgarde在軌類別達到的目標是任何一個類別(例如(100級))下的學生在365天后都會自動晉級到下一個類別(即200級別) 以及如果學生達到最高級別即500L,促銷停止

任何方式來做到這一點?

+1

什麼是實際問題?改變類別?確定是否已經過了365天?自動執行任務? – Stefan 2014-10-02 12:55:36

+0

問題是自動改變CATEGORY – Kadismile 2014-10-02 13:09:08

+4

http://theoatmeal.com/pl/minor_differences/capslock – Stefan 2014-10-02 13:15:06

回答

1

你必須寫這個任務,與代碼類似下面

User.all.each do |u| 
    if ((Time.now - u.created_at) > 365.days) && u.level == Level 100) 
    u.level = Level 200 
    if ((Time.now - u.created_at) > 365.days) && u.level == Level 200) 
    u.level = Level 300 
    if ((Time.now - u.created_at) > 365.days) && u.level == Level 300) 
    u.level = Level 400 
    if ((Time.now - u.created_at) > 365.days) && u.level == Level 400) 
    u.level = Level 500 
end 
+1

你的'如果'需要一些'末端' – Stefan 2014-10-02 13:06:01

+0

對不起,它是我的壞... ..有沒有可能是elsif條件... – Sontya 2014-10-02 16:33:27

2

我不喜歡太多的IFELSE。本來可以用類似製作Level Order映射的方式完成它,也可以從你的數據庫中取出,或者根據你是否有位置列來做。

class User < ActiveRecord::Base 
    LEVEL_ORDER = ["Level 100","Level 200","Level 300","Level 400", "Level 500"] 

    def assign_next_level 
    if (Time.now - created_at) > 365.days 
     self.level = next_level 
    end 
    end 

    def next_level 
    index = LEVEL_ORDER.find_index(level) 
    LEVEL_ORDER(index+1) 
    end 
end 


#This will iterate over user and check if created > 365 will call the instance 
# method assign_next_level. Will save you from Harcoding Level 
User.all.each do |user| 
    user.assign_next_level 
end