rails表單校驗功能討論

2021-08-29 11:23:16 字數 1808 閱讀 5001

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...