我想将answers
表中的内容与ActiveRecord交换。
代码1:无法使用ActiveRecord更新属性
Archieve::Answer.find_each do |answer|
str = answer.content
dosomething() #change the value
answer.update_attribute(:content,str)
end
但它不会改变的内容的价值。
代码2:
Archieve::Answer.find_each do |answer|
str = answer.content
dosomething() #change the value
answer.reload
answer.update_attributes(
:content => str
)
end
更新之前的:content
属性,我reload
每次记录。
它的确可以改变这个值。
为什么?
code 1
& code 2
有什么区别?
Source Code
###1 Post Debug Message:
Updated Post:
Changed?: false
valid?: true
errors: #<ActiveModel::Errors:0xa687568>
errors: #<ActiveModel::Errors:0xa687568 @base=#<Archieve::Answer id: 9997190932758339, user_id: 4163690810052834, question_id: 3393286738785869, content: "狗狗生病,好可怜呀,", is_correct: false, votes_count: 0, comments_count: 0, created_at: "2011-11-06 18:38:53", updated_at: "2011-11-06 18:38:53">, @messages={}>
其ActiveRecord的版本,您使用的?例如哪个Rails版本? – Tilo
@Tilo Rails和ActiveRecord的版本都是'3.1.1'。 –
@Tilo看起来对象没有改变,我只改变了'str'的值。 –