2016-01-06 124 views
0

使用update_attributes來更新一些屬性,我注意到一個特定的屬性被設置爲null。我如何克服它,以便我可以用它的新值保存對象?爲什麼rails'update_attributes將param設置爲null?

>> i=Item.find 4940  
#<Item id: 4940, sku: "ASKU", height: <BigDecimal:7fca72343e08,'0.1E3',9(18)>...> 
>> i.sku 
"ASKU" 
>> i.update_attributes(sku: "3232434") 
(0.1ms) BEGIN 
false 
Item Exists (0.3ms) SELECT 1 AS one FROM `items` WHERE (`items`.`sku` IS NULL AND `items`.`id` != 4940) LIMIT 1 
(0.1ms) ROLLBACK 
>> i.sku 
nil 
>> i.errors.messages.inspect 
"{:sku=>[\"can't be blank\", \"is too short (minimum is 3 characters)\"]}" 

的錯誤似乎是由說,這PARAM應該存在的驗證規則造成的 - 它確實存在 - 在調用時的update_attributes當它似乎消失了,除了!我已經刪除了驗證規則,它工作正常,除了我現在有一個空值,我需要一個有效的值。

如何保留SKU值並更新對象?

更新解決方案:錯誤是由我在模型中的一些代碼引起的,以確保字段被提高。刪除以下固定的一切;

def sku=(s) 
    super s.upcase! 
end 

回答

0

這個錯誤是由我在模型中的一些代碼引起的,以確保字段被提升。替換下面的工作就可以了。

def sku=(s) 
    super s.upcase! 
    end 

與...

before_validation :upcase_sku 

    def upcase_sku 
    self.sku.upcase! 
    end 
相關問題