Мои используемые envs перечислены ниже:
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
, если я изменилустановите значение в db пустым, тогда attribute_names - это массив, содержащий поле a, но поле value в db не пустое, attribute_names - пустой массив, но @attributes - это всегда карта, содержащая a, b и c.растерян, увидев код рельсов.