Rails 两种方式的验证,其中一种不起作用

douya0808 · 2012年04月02日 · 最后由 douya0808 回复于 2012年04月02日 · 2996 次阅读

是个很简单的问题,但是调试了 N 久都不知道究竟问题出自哪里

同样是对 title 的验证 写成

def validate
    if title.blank?
      errors.add( :title, "title can not be null")
    end
end

验证不起作用 写成

validates_presence_of(:title,:message=>"title can not be null")

验证才起作用 但是我死活不知道第一种写法错在哪了,只发这两部分了,因为第二个能好使说明其他的都好使就是第一个不好使了吧 嘎嘎:)

莫名感觉这里我是最菜的啊=。=别人的问题我一个都回答不了

你所谓的第一种验证写法错误。

旧的写法:

validates_presence_of(:title,:message=>"title can not be null")

新写法是类似下面的样子:

validates :email, :presence => true, :format => { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i }

参照这里:http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

书上管第一种叫做"自定义数据校验" 第二种叫做"数据校验器"=.=原来压根就没有第一种这种写法啊=。= ps:书为 Ruby On Rails Web 开发学习实录 而且我书上用的是 Rails3.0.3 应该不算很老呀

自定义校验这么写:

validate :no_blank_title

def no_blank_title
    if title.blank?
      errors.add( :title, "title can not be null")
    end
end

哎又是贪新不按书上的版本吧

新的自定义校验方法写法是

validate :title_no_blank
def title_no_blank
  if title.blank?
    errors.add( :title, "title can not be null")
  end
end

validate 不再作为重载的方法名,而是类宏。

文档 http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-methods

安装书上的版本,要不就看官方的 guides

@Rei 嘿嘿 我的第四版到了 但是这书只有 350 页 我下载的第二本都 700 多页呢 这是什么情况呢 书到的时候我看这么薄还以为送错书了呢

#6 楼 @douya0808 第 2 本中文版也是 700+,可能第 4 真的薄了吧,而且中文版排版很挤

@Rei 嘿嘿 上次你给我发的那本书的链接我还看到你的留言了 是 09 年的 你学的好早啊 等我接触的时候新技术都成老技术了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号