我正在尋找將值傳遞給自定義驗證。我已經做了以下的測試:Rails 3 - 將參數傳遞給自定義驗證方法
validate :print_out, :parameter1 => 'Hello'
有了這個:「空白」
def print_out (input="blank")
puts input
end
當創建一個對象或保存對象時,輸出爲但是,如果直接調用:
object.print_out "Test"
測試,而不是輸出。問題是,爲什麼我的參數不能正確傳遞?
我正在尋找將值傳遞給自定義驗證。我已經做了以下的測試:Rails 3 - 將參數傳遞給自定義驗證方法
validate :print_out, :parameter1 => 'Hello'
有了這個:「空白」
def print_out (input="blank")
puts input
end
當創建一個對象或保存對象時,輸出爲但是,如果直接調用:
object.print_out "Test"
測試,而不是輸出。問題是,爲什麼我的參數不能正確傳遞?
在'config \ initializers \'目錄中,您可以創建自己的驗證。作爲一個例子,我們來創建一個驗證'validates_obj_length'。不是一個非常有用的驗證,但是一個可接受的示例:
在'config \ intializers \'目錄內創建'obj_length_validator.rb'文件。
ActiveRecord::Base.class_eval do
def self.validates_obj_length(*attr_names)
options = attr_names.extract_options!
validates_each(attr_names, options) do |record, attribute, value|
record.errors[attribute] << "Error: Length must be " + options[:length].to_s unless value.length == options[:length]
end
end
end
一旦你有了這個,你可以使用很乾淨:
validates_obj_length :content, :length => 5
基本上,我們重新開始的ActiveRecord :: Base類並實現新的子驗證。我們使用splat(*)運算符來接受一組參數。然後我們將選項的散列提取到我們的'選項'變量中。最後我們實施我們的驗證。這使驗證可隨時用於任何模型並保持乾爽!
你可以嘗試
validate do |object_name|
object_name.print_out "Hello"
end
而不是你的validate:print_out,:參數1 => '你好'。
雖然這確實起作用,但它感覺不太乾淨。我嘗試無效的方式嗎? – Serodis 2011-05-26 01:31:13