2011-01-11 77 views
1

我使用ENVS列舉如下:Rails ActiveRecord update_attributes!不工作

Mysql: 5.1.51-community MySQL Community Server 
Rails: 2.3.5 
Ruby: 1.8.7 

有一個記錄,我得到的項目,然後我用下面的代碼來更新屬性,

item.update_attributes!(
    :a => a, 
    :b => b, 
    :c => c 
) 

所有這些更新屬性只有字段的值發生了變化,其他屬性值保持不變,但我不知道哪些屬性發生了更改,所以我更新了所有屬性。

在調試過程中,我發現該字段的值發生了變化,這與記錄項的值不同,但更新沒有任何效果。

有人可以幫我嗎?謝謝。

補充:

剛纔我跟蹤到Rails代碼,並且發現該問題與Rails代碼此相關的:如果我改變了場分貝值清空

def update(attribute_names = @attributes.keys) 
     quoted_attributes = attributes_with_quotes(false, false, attribute_names) 
     return 0 if quoted_attributes.empty? 
     connection.update(
     "UPDATE #{self.class.quoted_table_name} " + 
     "SET #{quoted_comma_pair_list(connection, quoted_attributes)} " + 
     "WHERE #{connection.quote_column_name(self.class.primary_key)} =  #{quote_value(id)}", 
     "#{self.class.name} Update" 
    ) 
    end 

,然後attribute_names是包含字段a的數組,但db中的值不爲空的字段,attribute_names是空數組,但@attributes始終是包含a,b和c的映射。看到rails代碼後感到困惑。

+0

沒有足夠的信息給出 - 我們需要至少該模型能夠正確回答這個問題。 – 2011-01-11 13:04:40

+0

我還應該提供哪些信息?謝謝你。 – ywenbo 2011-01-11 13:07:01

回答

0

我找到了原因,因爲改變字段值的方法有錯誤,改變之後,它的原始值和新值都是一樣的,所以AR沒有做更新操作,因爲沒有任何字段被改變。

2

對不起有沒有在這個問題去足夠的信息,所以這只是猜測:

你使用attr_accessibleattr_protected這個模型中的任何機會呢?

使用attr_accessible它不包括b和c或attr_protected,它包括b和c將解釋您所看到的行爲。

如果是這種情況,你將不得不做出多個update_attribute!調用。