superxielei 2008-06-20 00:22
浏览 282
已采纳

update_attributes更新失败~!~!

update_attributes更新一定要所有的属性都写上吗?怎么写部分的属性不能更新成功呢?
页面部分,如果点了修改密码的checkbox会把新密码的两个文本框显示出来,让用户输入新的密码..否则是不能输入的..
[code="html"]
<% form_tag :action => "update",:id => @user do %>




























<%= error_messages_for 'user' %>
名字: <%= @user.name %>
旧密码:
<%=password_field :user, :old_password, :size => 15 %>
<%=check_box_tag :change_password, "true",false,:onclick => "changePassowrd(this)" %>修改密码
$(&#39;change_password&#39;).checked = false;
密码: <%=password_field :user, :password, :size => 15 %>
确认密码: <%=password_field :user, :password_confirmation, :size => 15 %>
权限: <%= select(:user, :level , @types) %>

<%= submit_tag "修改用户信息" %>
<%= return_page "返回" , :type => "button" %>

<%end %>
[/code]
在Controller上判断是否需要修改密码,如果不需要修改密码会把参数里边的两个密码删除,不然密码就为空了...
然后更新,没有任何异常的执行成功,但是没有更新成功~!
如果将
params[:user].delete("password_confirmation")
params[:user].delete("password")
替换成
params[:user][:password_confirmation] = params[:user][:old_password]
params[:user][:password] = params[:user][:old_password]
就能正常更新成功!
这是为什么?
[code="ruby"]
def update
@user = User.find params[:id]
if request.post?
#如果修改密码,而且新密码为空,提示错误,否则将新密码设置和旧密码一样
if params[:change_password] and params[:user][:password].empty?
flash[:notice] = "必须输入新密码"
redirect_to :action => :update
else
params[:user].delete("password_confirmation")
params[:user].delete("password")
end
#如果旧密码为空,提示信息
if params[:user][:old_password].empty?
flash[:notice] = "必须输入旧密码"
redirect_to :action => :update
#如果旧密码相同,进行修改
elsif User.authenticate @user.name,params[:user][:old_password]
params[:user].delete("old_password")
@user.update_attributes(params[:user])
flash[:notice] = "修改成功";
redirect_to :action => :index
else
flash[:notice] = "旧密码错误"
end
end
end
[/code]
  • 写回答

1条回答 默认 最新

  • sendtocaryl 2008-06-21 10:20
    关注

    看model里面是否有 attr_accessible 或 attr_protected
    前者定义哪些属性不受保护,其他不会在update_attributes里更新
    后者反之.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog