我有一个简单的模型:的Rails:update_column作品,但不是update_attributes方法
class Reply < ActiveRecord::Base
attr_accessible :body
belongs_to :post
end
在我的控制,我有一个简单的更新方法:
def update
@reply = Reply.find(params[:id])
if @reply.update_attributes!(params[:reply])
render :js => "alert('I am trying to update!')"
else
render :js => "alert('<%= @reply.errors %>')"
end
end
这不会引发错误,但它也没有实际更新答复。相反,我得到了“我正在更新!”消息,就像一切工作。但是,当我重新加载页面并查看回复时,它具有相同的文本。它并未实际更新。如果我替换update_attributes:
@reply.update_column(:body, params[:reply][:body])
它工作正常。如果我使用:
@reply.update_attribute(:body, params[:reply][:body])
它再一次不起作用。任何想法发生了什么?
在我的记录,我有这样的:
Started PUT "/posts/2/replies/20" for 127.0.0.1 at 2013-01-19 10:39:57 -0600
Processing by RepliesController#update as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Xot7E+ldXiBm0hVvw5XUP/U5guJU2g8e4QaLbDVGzDE=", "reply"=>{"body"=>"Updated text."}, "commit"=>"Submit Revision", "post_id"=>"2", "id"=>"20"
[1m[35mUser Load (1.0ms)[0m SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
[1m[36mReply Load (0.0ms)[0m [1mSELECT `replies`.* FROM `replies` WHERE `replies`.`id` = 20 LIMIT 1[0m
[1m[35m (1.0ms)[0m BEGIN
[1m[36mPost Load (0.0ms)[0m [1mSELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 2 LIMIT 1[0m
[1m[35m (0.0ms)[0m COMMIT
Rendered replies/_reply_content.html.erb (502.0ms)
Rendered replies/update.js.erb (505.0ms)
Completed 200 OK in 849ms (Views: 484.0ms | ActiveRecord: 94.0ms)
您使用的是哪种版本的导轨? – Wasi
我使用3.2.11版本中的最新版本3.2.11。 – nullnullnull
你可以使用'update_attributes!'来查看它为什么没有保存。 – alestanis