rails針對model提供了完善的校驗功能,但有時候,我們的表單並不對應到model,比如login表單,比如search表單,這方面rails並沒有給出很好的解決方案(verify太簡陋),我是這麼實現的(實驗階段):
[code]
class << self
def validate_action(action_name,options={})
config = {}
yield config if block_given?
return false if config.empty?
filter_opts=
options=} if options[:render].nil? || options[:redirect_to].nil?
before_filter(filter_opts) do |c|
c.send :validates,config,options
endend
endprivate
def validates(validate_options={},options={})
@errors = {}
has_error=false
validate_options.each do |key,config|
field = key.to_sym
if params[field].nil? or params[field].empty?
@errors[field] = config[:message] || ""
has_error = true
endend
if has_error
unless performed?
render(options[:render]) if options[:render]
redirect_to(options[:redirect_to]) if options[:redirect_to]
endreturn false
else
return true
endend
[/code]
2、需要檢驗的controller增加檢驗配置:
[code]
validate_action :test do |config|
config[:loginame] =
config[:password] =
enddef index
render :action=>"test"
enddef test
redirect_to :controller=>"/"
endend
[/code]
3、增加表單:
[code]
<%
full_messages =
@errors.each() do|attr,msg|
full_messages << msg
end unless @errors.nil?
%>
<%if !full_messages.empty?%>
<%full_messages.each do |msg|-%>
<%=msg%>
<%end-%>
<%end%>
<%form_tag :action=>"test" do%>
<%= text_field_tag "loginame",params[:loginame]%>
<%= password_field_tag "password",params[:password]%>
<%end%>
[/code]
解決註冊功能中表單校驗的錯誤
開啟網頁後,先獲取了username的值,然後直接通過正則判斷了,觀察後發現是由於blur函式中應該傳遞的是函式名 an highlighted block 校驗使用者名稱 function checkusername 3.判斷,給出提示資訊 var flag reg username.test u...
rails自定義校驗
當內建的校驗 helpers 不能滿足專案需求時,可以根據具體需求來編寫自己的校驗器或者校驗方法。其中,當有比較通用的規則需要校驗時,優先考慮使用自定義校驗器.自定義校驗器 給需要校驗的單獨屬性新增自定義校驗器最便捷的方法是使用 activemodel eachcalidator。這種情況下,自定義...
Rails中的validate校驗
可以使用validates presence of方法宣告模型類別非空驗證 validates presence of name,message 姓名不能為空 validates presence of message 性別不能為空 還可一次為多個屬性驗證 validates presence of...