`
cjyzpcl
  • 浏览: 33726 次
  • 性别: Icon_minigender_1
  • 来自: Charlotte
社区版块
存档分类
最新评论

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

阅读更多

      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做中文化处理的。不过按照上述方法,可以快速在开发中看到效果,便于调整以后使用。

分享到:
评论
3 楼 chaoqun2003 2008-06-21  
请问你提到的中文化validator的资料哪里能找到?我一直搜索不到阿..
2 楼 cjyzpcl 2007-07-22  
yehs220 写道
不是有error_messages_for,error_message_on吗?

我知道,只是上述是和scaffold中的css绑定的。如果我只需要他的error messages而不需要样式我觉得上面的较为简单些。当然也可以修改error_messages_for方法来修改样式。
1 楼 yehs220 2007-07-22  
不是有error_messages_for,error_message_on吗?

相关推荐

Global site tag (gtag.js) - Google Analytics