`
wiisola
  • 浏览: 87410 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何在update一条记录的部分字段时跳过某些校验

阅读更多
我照Agile Web Development with Rails里第11章用户管理的做了,用了password这个虚拟字段。
user.rb中的部分代码:
validates_length_of :password, :in => 6..20

def password
  @password
end

def password=(pwd)
  @password = pwd
  returen if pwd.blank
  created_new_salt
  self.hashed_password = User.encrypted_password(self.password, self.salt)
end

然后,我需要update该用户记录部分字段的值,比如email,im等等,但不希望改变密码,我用的是下面的办法。
user_controller.rb中的部分代码:
def update
  @user = User.find(params[:id])
  if @user.update_attributes(:email => params[:user][:email], :im => params[:user][:im])
    flash[:notice] = '个人信息修改完成'
    redirect_to :action => 'index'
  else
    render :action => 'edit'
  end
end

因为这个password字段并没有存储在数据库中,因此它值为空,于是每次都会出现校验错误:Password is too short (minimum is 6 characters)。

我想问一下只update部分字段应该用什么办法比较好(别的字段需要保留原来的值,可以先取出来;但由于SHA1加密,passowrd不能由hashed_password取出)?
还有能否在某些地方跳过部分校验?我这里的password需要在create和update时都要校验,但我想有的时候修改部分信息的时候不要校验password?
分享到:
评论
7 楼 bugx 2008-11-02  
这样不是变得密码可以为空了吗
6 楼 wiisola 2008-03-27  
theone 写道
wiisola 写道
theone 写道
update_all ["password =?", password], ['id=?,1]



那如何更新多个字段呢?第1个参数传hash好象不行。。


这样写
update_all ["username = ?, password =?", username, password], ['id=?',1]


谢谢,不过我找到办法了
validates_length_of :password, :in => 6..20, :allow_nil => true

原来allow_nil是这么个意思阿,以前误解了...
5 楼 theone 2008-03-27  
wiisola 写道
theone 写道
update_all ["password =?", password], ['id=?,1]



那如何更新多个字段呢?第1个参数传hash好象不行。。


这样写
update_all ["username = ?, password =?", username, password], ['id=?',1]

4 楼 wiisola 2008-03-27  
不见得 写道
update_attribute(s)

我本来就是用的这个
@user.update_attributes(:email => params[:user][:email], :im => params[:user][:im])
但是修改的时候会校验password,是通不过的,我就是想问有什么办法
3 楼 不见得 2008-03-27  
update_attribute(s)
2 楼 wiisola 2008-03-27  
theone 写道
update_all ["password =?", password], ['id=?,1]



那如何更新多个字段呢?第1个参数传hash好象不行。。
1 楼 theone 2008-03-27  
update_all ["password =?", password], ['id=?,1]

相关推荐

    Hibernate更新某些字段

    在实际开发中,我们经常需要更新数据库中的某些字段,而不是所有字段。那么,如何使用 Hibernate 实现更新某些字段呢? 首先,我们需要了解 Hibernate 的 update 方法。在 Hibernate 中, update 方法可以更新整个...

    EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库

    在Java开发中,处理大量数据时,高效的数据读取、校验和存储是至关重要的。Apache POI等库常用于处理Excel文件,但其性能在处理大数据时可能会受限。这时,阿里巴巴开源的EasyExcel应运而生,它专门优化了Excel处理...

    执行一条sql语句update多条记录实现思路

    在SQL语言中,更新多条记录的字段值且每行记录的字段值各不相同时,通常有两种常用的方法。一种是使用CASE语句结合IF-THEN逻辑,另一种是利用INSERT语句的DUPLICATE KEY UPDATE特性。这两种方法都可以避免循环执行多...

    sql一个字段中的某几个字update

    在SQL中更新表中某个字段的部分内容是一个常见的需求,尤其是在数据清洗或数据转换过程中。根据题目中的描述与部分代码示例,本篇将详细介绍如何在SQL中实现对某个字段内指定位置的字符进行替换、插入或删除等操作。...

    mysql 一次更新(update)多条记录的思路

    在MySQL中,更新多条记录通常涉及到`UPDATE`语句的使用。在处理批量更新时,如果需要根据特定条件更新不同记录的多个字段,可以采用`CASE`语句结合`WHERE`子句来实现。标题提到的问题是,在已经通过`INSERT`方法导入...

    MySQL 替换某字段内部分内容的UPDATE语句

    在MySQL数据库中,更新表中特定字段的特定内容是一项常见的任务。这通常通过`UPDATE`语句配合`REPLACE`函数来实现。`REPLACE()`函数用于在字符串中替换所有出现的子串,而`REGEXP`是正则表达式匹配,两者结合可以...

    SuperMap Objects Java字段更新

    在数据库或数据集中,每个记录都由多个字段组成,每个字段代表一种特定的信息,如名称、地址或日期。更新字段是指修改现有数据集中的某个特定属性值,这可能涉及到单个记录,也可能涉及整个数据集的批量更新。 本...

    mysql批量更新多条记录的同一个字段为不同值的方法

    在MySQL中,批量更新多条记录的同一个字段为不同的值是一项常见的操作,特别是在处理大量数据时,为了提高效率,我们需要避免循环执行单独的UPDATE语句。以下是一些关于如何高效地进行批量更新的方法。 首先,最...

    SQL查询最新时间字段及其他字段.rar

    例如,如果你需要在多个表中查找最新记录,并确保某些关联字段的一致性,查询会变得更复杂。不过,上述示例提供了一个基础的框架,你可以根据具体需求进行扩展。 Access数据库(.accdb文件)是Microsoft Office套件...

    sql 在更新某字段后写入日志触发器

    本篇文章将详细介绍如何在SQL Server中创建一个触发器,当某个表中的特定字段被更新时,记录相关信息到另一个表中,以实现类似日志记录的功能。 #### 触发器概述 触发器是SQL Server提供的一种机制,可以在表或视图...

    Mybatis只更新set过的字段插件

    在实际项目中,我们经常遇到这样的需求:当需要更新数据库记录时,只更新实体对象中被设置(set)过的属性,而忽略那些未被修改的字段。为了实现这一功能,"Mybatis只更新set过的字段插件"应运而生。 这个插件的...

    VB 利用UPDATE语句批量更新数据表中的数据

    UPDATE语句是SQL语言的一个重要部分,用于修改已存在于数据库表中的记录。在VB中,我们可以结合ADO(ActiveX Data Objects)库来执行这些操作。 首先,确保你已经安装了ADO库,如果没有,你需要在项目中引用...

    oracle执行update语句时卡住问题分析及解决办法

    开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果。但是奇怪的是执行其他的select语句却是可以执行的。 原因和解决方法 这种...

    Mysql Update批量更新的几种方式

    但是,如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?刚开始你可能会想到使用循环执行多条UPDATE语句的方式,就像以下的python程序示例: for x in xrange(10): sql = ''' UPDATE ...

    BW DSO的记录模式Record Mode字段测试

    - U: UPDATE,表示一条记录被更新了 - D: DELETE,表示一条记录被删除了 - X: 表示记录是变化的,但具体是新增还是更新则需要进一步分析,通常是变化后的值 - I: 表示记录有数据,但是不参与激活过程 根据上述描述...

    ORACLE多表关联的update语句

    在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...

    insert,update导出sql语句

    例如,如果我们有一个名为`Students`的表,包含`ID`,`Name`和`Age`三列,我们可以这样插入一条新记录: ```sql INSERT INTO Students (ID, Name, Age) VALUES (1, '张三', 18); ``` 接着是UPDATE语句,它用于修改...

    SQL Server 触发器 表的特定字段更新时,触发Update触发器

    在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT,UPDATE或DELETE)发生时自动执行。触发器可以用于实现复杂的业务规则和数据验证,以确保数据库中的数据完整性。在这个例子中,我们关注的...

    asp使用SQL语句的UpDate命令修改数据库表中的一个记录.pdf

    本教程将指导你如何使用SQL的`UPDATE`命令在ASP中修改数据库表中的一个记录。 首先,`UPDATE`语句是SQL语言中用于修改已有记录的关键语句。其基本格式如下: ```sql UPDATE 表名 SET 字段名1 = 新值1, 字段名2 = ...

    asp使用SQL语句的UpDate命令修改数据库表中的一个记录[收集].pdf

    在赋值时,根据字段类型,可能需要添加引号或特定符号。例如,文本型和备注型字段值需要加引号,日期/时间型字段值需加#号,布尔类型用True或False表示。 **2. ASP中执行SQL Update操作** 在ASP中,我们通常会先...

Global site tag (gtag.js) - Google Analytics