论坛首页 Ruby版 rails

关于validates_presence_of方法的疑问

浏览 895 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-11-09
请问,为什么我在model类中加入了validates_presence_of :name, :ctiy,:email方法,来验证三个字段,但提交表单的时候,如果不填写这三个字段依然不会提示错误呢?
class User < ActiveRecord::Base

attr_accessor :name
attr_accessor :city
attr_accessor :email
attr_accessor :have_ex #whether have experience

def initialize(name,email,city,have_ex)
@name = name
@email = email
@city = city
@have_ex = have_ex
end
self.validates_presence_of :name, :ctiy,:email
end
   
时间:2007-11-09
楼主以前是弄JAVA的吗,rails好象不是这么写的吧
   
0 请登录后投票
时间:2007-11-09
class User < ActiveRecord::Base
validates_presence_of :name, :ctiy,:email

attr_accessor :name
attr_accessor :city
attr_accessor :email
attr_accessor :have_ex #whether have experience

end


不要覆盖initialize


一般新建用User.new或者User.create({}),或者再创建一个另外的方法也行
   
0 请登录后投票
时间:2007-11-09
目前的问题是,我加了验证方法,去没有被执行。

这里我的疑问是,这个验证方法以及其他几个验证方法是否都只是在执行和数据库相关的操作时,比如保存在数据库中和创建新的实例对象是才激活验证方法。而如果我只是想把模型对象保存的信息简单的显示在一个view页面中,而不操作数据库,这些验证方法是否都不会被调用呢?即使写成:validates_presence_of :name, :ctiy,:email,n=> create 这里用on选项指定在模型对象被创建时候调用验证方法,应该也只是指在对象被存储在数据库之前对象被创建的时候吧?

今天在和一个朋友交流过,他也这么认为,目前我也是这么想的,不知道是否正确,还望朋友们指教。
   
0 请登录后投票
时间:2007-11-09
个人理解,validates_presence_of方法,仅仅在存入数据库的时候才会调用,如果想要实现ls说的那种情况,需要自己添加验证代码
   
0 请登录后投票
时间:2007-11-10
try

class User < ActiveRecord::Base
validates_presence_of(:name, :on=>[:create, save])
validates_presence_of(:ctiy, :on=>[:create, save])
validates_presence_of(:email, :on=>[:create, save])

attr_accessor :name
attr_accessor :city
attr_accessor :email
attr_accessor :have_ex #whether have experience

end

=========================

更简单的办法,还是用 sina2009 的代码,然后

user = User.new(paras[:user])
user.valid?

因为:

valid?()

Runs validate and validate_on_create or validate_on_update and returns true if no errors were added otherwise false.
   
0 请登录后投票
时间:2007-11-12
validate方法是验证模型的,没有问题,关键是你覆写了模型的初始化方法。应该直接继承ActiveRecord::Base的初始化方法,这样验证才能生效。
   
0 请登录后投票
时间:2007-11-12
Model的attr_accessor和attributes同样都可以使用AR自带的验证方法

在保存Model实例时AR会自动调用Validate方法,如果需要在未保存情况下验证那就使用 Model.valid? 吧

楼主的用法比较怪异,建议看一下API
   
0 请登录后投票
时间:2007-11-12
感谢各位朋友的帮助,这些天也对此有了更深刻的认识。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐