2016-12-17 102 views
0

我有一個json文件,我正在導入到我的Rails數據庫。before_save rails替換零值

JSON:

{ 
"data": [{ 
    "title": "foo", 
    "color": "bar", 
    "size" : "baz", 
    "occupation" : "engineer", 
    "location" : "dallas", 
    "car" : "tesla", 
    "married" : true, 
    "dogs" : 4, 
    "food" : "tacos" 
}] 

現在讓我們說「標題」是不是在其中一個樣品上市,它的存儲爲零。我知道我可以使用before_save更新此模型

Class Person 
    before_save :replace_nil_values 

    private 

    def replace_nil_values 
    self.title = "Not Listed" if title == nil 
    end 
end 

This works。問題是如果多個屬性丟失或列爲nil會發生什麼?我覺得這樣做會超效率:

def replace_nil_values 
    self.title = "Not Listed" if title == nil 
    self.color= "Not Listed" if color == nil 
    self.size = "Not Listed" if size == nil 
    self.occupation = "Not Listed" if occupation == nil 
    self.location = "Not Listed" if location == nil 
    self.car = "Not Listed" if car == nil 
end 

有沒有更高效的方法來做到這一點?

感謝

回答

3

我的建議是離開他們在數據庫中nil。如果您需要在用戶界面中顯示「未列出」,請在顯示數據時執行此操作。這提供了許多好處:

  • 您可以輕鬆更改「未列出」別的東西的道路。
  • 您可以即時翻譯它。
  • 您永遠不會將空白的「未列出」與用戶輸入的合法「未列出」混淆。
+0

感謝Philip!我從未考慮過這些後果。我跑你的答案,並執行一個幫手方法在這裏解釋:http://stackoverflow.com/a/22098115/3007294 欣賞它! – user3007294

+0

你可能想要閱讀關於裝飾者/演示者模式,這將允許你創建一個'PersonPresenter'和'title'方法來封裝你的幫助者邏輯。同樣的事情,只是鞏固了一些。有關其他選項,請參閱http://railscasts.com/episodes/286-draper。 –