2012-11-13 37 views
0

我有一個設置表5個布爾字段。我希望能夠通過JSON創建和更新這些字段。據我所知,Rails將所有參數轉換爲字符串,以便布爾值始終返回true。如果我派:通過JSON API在Rails中更新布爾型字段?

{ "settings": { "setting1":true, "setting2":false } } 

然後嘗試做:Setting.new(params[:settings]),這兩種設置是正確的數據庫,因爲false第二設置的值轉換爲"false",因此實際的計算結果爲true。其實我甚至不能這樣做,因爲我得到:

NoMethodError (undefined method `stringify_keys' for #<String:0x000000213dcbd0>) 

在那一行上。來自互聯網的一些建議說,將參數與"true"進行比較,然後存儲該參數。儘管這是一個巨大的痛苦,因爲那樣我就無法利用大規模的任務。我不希望有這樣做:

@setting = Setting.new 
@setting.setting1 = (params[:settings][:setting1].eql? "true") 
... 

對於所有5個領域,尤其是因爲我將不得不這樣做,對創建,更新,甚至可以從其他控制器(某些控制器接受JSON創建設置對象以及他們自己的屬性)。

有沒有更好的方法來解決這個問題? JSON API對於Rails來說看起來很標準,看起來這將會以更優雅的方式來處理?

回答

0

只需製作一個轉換器類並將其粘貼在一個過濾器之前,如何?

class ApplicationController < ActionController::Base 
    before_filter BooleanFilter 
end 

class BooleanFilter 
    def self.filter(controller) 
    # change all relevant string params to booleans, raise an exception if something other than "true" or "false" is detected 
    # eg. params[:setting][:setting1] = (params[:setting][:setting1] == "true" ? true : false) 
    end 
end 

它可能更符合Rails將更改的參數分配給新的哈希對象並將其傳遞給模型。

+0

這基本上是我一起去的。我仍然認爲這是可笑的,你必須做一個解決方法,以便Rails識別有效的JSON -_- –

+0

看到我的回答,我認爲這是矯枉過正,你可以使用'「0」而不是false。 –

1

您可以傳遞「0」而不是false來將該字段的值設置爲false。

+0

爲真。 [不會與.where一起使用(active:'1')例如] – lakesare

相關問題