我使用的env如下所示:
Mysql: 5.1.51-community MySQL Community Server
Rails: 2.3.5
Ruby: 1.8.7我有一条记录是item,然后我使用下面的代码来更新属性,
item.update_attributes!(
:a => a,
:b => b,
:c => c
)对于所有这些更新的属性,只有一个字段的值被更改,其他属性值保持不变,但我不知道哪些属性被更改,所以我更新了所有属性。
在调试过程中,我发现字段a的值被更改了,这与记录项的a值不同,但更新没有任何影响。
有人能帮我吗?谢谢。
添加:
刚才我追踪了一下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如果我将db中的字段a值更改为空,那么attribute_names是一个包含字段a的数组,但是db中的字段a值不是空的,attribute_names是一个空数组,但@attributes始终是一个包含a、b和c的映射。
发布于 2011-01-11 23:33:20
我找到了原因,因为更改字段值的方法有错误,更改后,它的原始值和新值是相同的,所以AR不做更新操作,因为没有任何字段被更改。
发布于 2011-01-11 21:13:30
很抱歉,问题中没有足够的信息来继续,所以这只是猜测:
你有没有可能在这个模型上使用attr_accessible或attr_protected?
使用attr_accessible,它不包括b和c,或者attr_protected,它包括b和c,可以解释你所看到的行为。
如果是这种情况,你将不得不创建多个update_attribute!电话。
https://stackoverflow.com/questions/4657895
复制相似问题