def page_rewrite2
temp = Db1.find(params[:id])
temp.content = params[:submit_recontent]
temp.save
redirect_to "/contrl1/page_main"
end
此代码效果很好。 内容已更改并保存。
def page_rewrite2
Db1.find(params[:id]).content = params[:submit_recontent]
Db1.find(params[:id]).save
redirect_to "/contrl1/page_main"
end
我认为这段代码也必须运作良好。 但是,此代码不能很好地工作。 为什么这两个相似的代码会产生不同的结果?
答案 0 :(得分:0)
原因是Db1.find
方法总是返回新的实例od Db1类。两个实例可能绑定到同一个db记录,但是在编程级别它们是不同的对象。它几乎与:
class A
attr_accessor :a
end
obj = A.new
obj.a = 4
obj.a #=> 4
A.new.a #=> nil, not 4
答案 1 :(得分:0)
在第二种情况下
def page_rewrite2
Db1.find(params[:id]).content = params[:submit_recontent]
Db1.find(params[:id]).save
redirect_to "/contrl1/page_main"
end
您首先加载记录,为其内容分配一些新值。 之后您再次加载记录并保存。这个新加载的记录不知道您在上一步中更新了内容。这就是为什么它不能像你想象的那样工作。
通过将加载的记录分配给变量,就像您在第一个示例中所做的那样,该记录知道其内容已更新,因此它会保存该信息。