论坛首页 编程语言技术论坛

表单验证错误信息一些使用技巧(适用于快速开发)

浏览 4106 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-22  

      Rails提供了表单验证错误信息的输出,但是本身没有支持中文化,而且在html如想按照指定方式显示需要修改scaffold.css。开发中如果需要快速看到效果的朋友,下面有些简单的技巧供你参考。

      需要完美中文化Validator的,请在Javaeye中自行搜索。

      首先查看下面的代码片段:

ruby 代码
  1. class Diary < ActiveRecord::Base   
  2.   belongs_to :diary_category  
  3.   belongs_to :blog  
  4.   has_many :replies:as => :replyable:dependent => true  
  5.      
  6.   validates_presence_of :title,   
  7.                       :message => "文章主题不能为空!"  
  8.   validates_presence_of :content,   
  9.                       :message => "文章内容不能为空!"  
  10.   validates_length_of :title:in => 5..50,   
  11.                       :too_long => "文章主题必须在5到50字符之间!",   
  12.                       :too_short => "文章主题必须在5到50字符之间!"  
  13.   validates_length_of :content:minimum => 15,   
  14.                       :message => "文章内容必须大于15个字符!"                         
  15.       
  16. end  

    片段中对验证信息进行了一些简单的中文化处理。当Diary的一个对象比如diary保存失败时,我们就可以从diary.errors中来取得错误信息集合。比如下面的controller代码:

ruby 代码
  1. def new_diary   
  2.    if request.get?   
  3.      @categories = @user.blog.diary_categories.collect { |category| [category.name, category.id]}   
  4.      @categories[@categories.size] = [" ""0"]   
  5.      @categories.reverse!   
  6.    else  
  7.      @diary = Diary.new(params[:diary])   
  8.      @diary.created_time = Time.now   
  9.      @diary.blog = @user.blog   
  10.      @diary.viewer_count = 0   
  11.      if @diary.save   
  12.        flash[:message] = ["新增文章成功!"]   
  13.        redirect_to :action => :show_diaries  
  14.      else  
  15.        flash[:error] = []   
  16.        @diary.errors.each { |property, error| flash[:error] << error }   
  17.        redirect_to :action => :new_diary  
  18.      end  
  19.    end  
  20.  end  

    代码将diary保存失败的错误信息处理后转入flash[:error]中,这样在View中就可以通过遍历flash[:error]来使用。这里为了以后适用方便,在application_helper.rb中加入了一个帮助方法。

ruby 代码
  1. def message(messages)   
  2.    if messages != nil and messages.size > 0   
  3.      bulk = ""  
    •      messages.each { |message| bulk << %{class="alarm">#{message}} }   
    •      bulk << ""  
  4.    else  
  5.    ""  
  6.    end  
  7.  end  

    这样就能在View中通过 <!---->和 <!---->显示错误信息。如果需要定义样式,只需要修改message方法即可。

    以上技巧只能解决一时只需,后期还是需要对整个Rails做中文化处理的。不过按照上述方法,可以快速在开发中看到效果,便于调整以后使用。

   发表时间:2007-07-22  
不是有error_messages_for,error_message_on吗?
0 请登录后投票
   发表时间:2007-07-22  
yehs220 写道
不是有error_messages_for,error_message_on吗?

我知道,只是上述是和scaffold中的css绑定的。如果我只需要他的error messages而不需要样式我觉得上面的较为简单些。当然也可以修改error_messages_for方法来修改样式。
0 请登录后投票
   发表时间:2008-06-21  
请问你提到的中文化validator的资料哪里能找到?我一直搜索不到阿..
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics