0 0

update_attributes更新失败~!~!5

update_attributes更新一定要所有的属性都写上吗?怎么写部分的属性不能更新成功呢?
页面部分,如果点了修改密码的checkbox会把新密码的两个文本框显示出来,让用户输入新的密码..否则是不能输入的..
<% form_tag :action => "update",:id => @user do %>
	<table width="100%" border="0" cellpadding="1" cellspacing="1" class="date_table">
		<tr>
			<td colspan=2><%= error_messages_for 'user' %></td>
		</tr>
		<tr>
			<td width="70">名字:</td>
			<td><%= @user.name %></td>
		</tr>
		<tr>
			<td>旧密码:</td>
			<td>
				<%=password_field :user, :old_password, :size => 15 %>
				<%=check_box_tag :change_password, "true",false,:onclick => "changePassowrd(this)" %>修改密码
				<script>$('change_password').checked = false;</script>
			</td>
		</tr>
		<tr style="display:none;" id="txtPwd1">
			<td>密码:</td>
			<td><%=password_field :user, :password, :size => 15 %></td>
		</tr>
		<tr style="display:none;" id="txtPwd2">
			<td>确认密码:</td>
			<td><%=password_field :user, :password_confirmation, :size => 15 %></td>
		</tr>
		<tr>
			<td>权限:</td>
			<td><%= select(:user, :level , @types) %></td>
		</tr>
		<tr>
			<td colspan="2">
				<%= submit_tag "修改用户信息" %>
				<%= return_page "返回" , :type => "button" %>
			</td>
		</tr>
	</table>
    <%end %>

在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]
就能正常更新成功!
这是为什么?
  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
2008年6月20日 00:22

1个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2008年6月21日 10:20

相关推荐

    mongoid_transaction:使用TokuMx在Mongoid中进行交易

    Mongoid交易 该gem用于使用TokuMx提供的Transaction API以及mongoid。 ##请勿使用此GEM(如果您看到此行)。 工作正在进行中。 安装 将此行添加到您的应用程序的...,update_attributes!,set,update_attribute)

    active_rails_examples

    10. **更新记录(Updating Records)**: 可以通过`update`或`update_all`方法更新记录。`user.update(name: "Jane Doe")`将更新当前用户的姓名,而`User.update_all(name: "Admin")`会将所有用户的姓名改为"Admin"。...

    gitlab+LDAP认证安装+同步备份

    &gt; ApplicationSetting.last.update_attributes(password_authentication_enabled_for_web: true) ``` #### 二、LDAP 安装与配置 **1. 关闭防火墙和 SELINUX** 为了确保 LDAP 的正常安装和运行,需要关闭防火墙...

    注解版本声明事务小例子

    在这个例子中,如果`updateUser()`和`updateOrder()`任意一个操作失败,整个事务将被回滚,确保数据的一致性。 2. **XML配置声明事务**:在Spring的XML配置文件中,我们可以通过`&lt;tx:annotation-driven&gt;`元素开启...

    gridview 简单代码

    Response.Write("&lt;script&gt;alert('删除失败');&lt;/script&gt;"); } } else if (e.CommandName == "upd") { int id = Convert.ToInt32(e.CommandArgument); Response.Redirect("Update.aspx?id=" + id); } } ...

    周二上午-ZY1906-研究生套件2(BGP)1

    - PATH ATTRIBUTES:携带路由属性,包括ORIGIN、AS_PATH、NEXT_HOP、MULTI_EXIT_DISC等。 - - ORIGIN:标识路由来源,如IGP(内部网关协议)或EGP(外部网关协议)。 - - AS_PATH:记录路由经过的自治系统(AS)...

    BGP路由协议详解

    与内部网关协议(如RIP或OSPF)不同,BGP不是基于距离或速度选择路由,而是使用策略决策,通过属性(attributes)选择最佳路径。BGP的路径选择是基于一系列的属性而非单一的度量值(metric),这些属性包括:AS路径...

    教你如何利用XML创建升级程序的好文章

    2. 更新描述:对每个更新进行简要描述,例如 `&lt;update description="修复了若干bug,提高了稳定性"&gt;`。 3. 文件列表:列举需要更新或新增的文件,包括文件名、大小、MD5校验码等,如 `...

    VC++ 定时关机及显示系统时间万年历

    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); // 请求系统关机 if (ExitWindowsEx(EWX_SHUTDOWN, 0) == 0) { ...

    ZendFramework中文文档

    7.13.1. 从 1.0.x 到 1.5.0 或更新的版本的移植 7.13.2. 从 0.9.3 到 1.0.0RC1 或更新的版本的移植 7.13.3. 从 0.9.2 移植到 0.9.3 或更新的版本 7.13.4. 从 0.6.0 移植到 0.8.0 或更新的版本 7.13.5. 从 0.2.0 ...

    matlab连接SQL数据库 (2).docx

    这些功能可以通过`insert`, `update`, `delete`等函数实现。此外,还可以编写自定义函数来封装更复杂的数据库操作。 五、MATLAB数据库连接方式 MATLAB与数据库的连接除了ODBC方式外,还可以通过JDBC(Java ...

    发送程序-源码

    ShowMessage(ClientDataSetH.FieldByName('fCarNum').asString + '发送失败!'); ClientDataSetH.Next; end; end else begin ShowMessage(ClientDataSetH.FieldByName('fPictureName').asString + '图片未选择...

    Laravel开发-validating 模型数据自动验证 .zip

    当我们尝试保存或更新模型时,可以调用`$model-&gt;save()`或`$model-&gt;update($attributes)`方法,Laravel会自动在保存之前执行验证。如果验证失败,将抛出一个`ValidationException`异常,我们可以通过异常处理器来...

    Laravel:Formularios

    在视图中,可以使用`old()`辅助函数处理验证失败后的旧数据,并结合`Model::getAttributes()`获取模型的属性值。 ```php {!! Form::model($post, ['method' =&gt; 'PUT', 'route' =&gt; ['posts.update', $post-&gt;id]]) !!...

    nestedUpdate:用于确定Sails关联的更新行为的沙箱

    在进行级联更新时,可能会遇到诸如关联不存在、数据验证失败等问题。因此,正确处理异常和错误是使用`nestedUpdate`时需要注意的关键点。通过使用`.catch()`或`.then(null, rejectionHandler)`来捕获并处理可能出现...

    Laravel开发-validator

    在Laravel中,数据验证通常在控制器的`store`或`update`方法内进行。通过`Validator::make`方法创建一个新的验证实例,然后传递一个包含字段名和验证规则的数组。例如: ```php use Illuminate\Support\Facades\...

    Entity FrameWork 6.0 Code First

    9. **事务处理**:在需要确保一组操作全部成功或全部失败的情况下,可以使用DbContext的`SaveChangesAsync`方法配合`TransactionScope`进行事务处理。 10. **性能优化**:Code First允许设置查询缓存、延迟加载...

    ios-coredata简单封装.zip

    封装库可能提供了一个`updateObject:withValues:forKeys:`的接口,允许开发者通过键值对更新对象的多个属性。 5. **查(查询数据)**: Core Data的查询功能强大,它支持NSPredicate来构造复杂的查询条件。封装库...

    Spring Hibernate事务实例

    事务是一组数据库操作,这些操作要么全部成功,要么全部失败。在Java中,事务管理有编程式和声明式两种方式。编程式事务管理需要开发者手动编写事务开始、提交和回滚的代码,而声明式事务管理则通过配置来定义事务...

    Yii 连接、修改 MySQL 数据库及phpunit 测试连接

    其中,$id是主键值,$attributes是要修改的字段数组,$condition是更新条件,$params是传入的参数。 第二种方法是先通过findByPk()函数获取模型对象,然后修改模型的属性值,最后调用update()函数保存修改。示例...

Global site tag (gtag.js) - Google Analytics