Rails提供了表单验证错误信息的输出,但是本身没有支持中文化,而且在html如想按照指定方式显示需要修改scaffold.css。开发中如果需要快速看到效果的朋友,下面有些简单的技巧供你参考。
需要完美中文化Validator的,请在Javaeye中自行搜索。
首先查看下面的代码片段:
ruby 代码
- class Diary < ActiveRecord::Base
- belongs_to :diary_category
- belongs_to :blog
- has_many :replies, :as => :replyable, :dependent => true
- validates_presence_of :title,
- :message => "文章主题不能为空!"
- validates_presence_of :content,
- :message => "文章内容不能为空!"
- validates_length_of :title, :in => 5..50,
- :too_long => "文章主题必须在5到50字符之间!",
- :too_short => "文章主题必须在5到50字符之间!"
- validates_length_of :content, :minimum => 15,
- :message => "文章内容必须大于15个字符!"
- end
片段中对验证信息进行了一些简单的中文化处理。当Diary的一个对象比如diary保存失败时,我们就可以从diary.errors中来取得错误信息集合。比如下面的controller代码:
ruby 代码
- def new_diary
- if request.get?
- @categories = @user.blog.diary_categories.collect { |category| [category.name, category.id]}
- @categories[@categories.size] = [" ", "0"]
- @categories.reverse!
- else
- @diary = Diary.new(params[:diary])
- @diary.created_time = Time.now
- @diary.blog = @user.blog
- @diary.viewer_count = 0
- if @diary.save
- flash[:message] = ["新增文章成功!"]
- redirect_to :action => :show_diaries
- else
- flash[:error] = []
- @diary.errors.each { |property, error| flash[:error] << error }
- redirect_to :action => :new_diary
- end
- end
- end
代码将diary保存失败的错误信息处理后转入flash[:error]中,这样在View中就可以通过遍历flash[:error]来使用。这里为了以后适用方便,在application_helper.rb中加入了一个帮助方法。
ruby 代码
- def message(messages)
- if messages != nil and messages.size > 0
- bulk = ""
- messages.each { |message| bulk << %{class="alarm">#{message}} }
- bulk << ""
- else
- ""
- end
- end
这样就能在View中通过 和 显示错误信息。如果需要定义样式,只需要修改message方法即可。
以上技巧只能解决一时只需,后期还是需要对整个Rails做中文化处理的。不过按照上述方法,可以快速在开发中看到效果,便于调整以后使用。