2016-01-06 89 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 
相关问题