关于错误信息,0的使用还有sprintf: >> @error_messages = ActiveRecord::Errors.default_error_messages; 0 => 0 >> @error_messages[:too_short] => "is too short (maximum is %d characters)" >> sprintf(@error_messages[:too_short], 17) => "is too short (maximum is 17 characters)"
改写默认string class的方法在lib/string.rb中 class String #写自己的method end
replace能用另一个object取代自己,如: def capitalize_each space = " " split(space).each{ |word| word.capitalize! }.join(space) end # Capitalize each word in place. def capitalize_each! replace capitalize_each end
写一个检查整数的method: class Object # Return true if the object can be converted to a valid integer. def valid_int? begin Integer(self) true rescue ArgumentError false end end end 注意nil.valid_int? 返回 true (Integer(nil) == 0) 但 nil.valid_float? 返回 false(Float(nil) 产生 ArgumentError exception).
使用.errors.add("xxx")的方法写校检method. def valid_input? @spec = Spec.new if @spec.valid? and not zip_code.blank? and location.nil? @spec.errors.add(:zip_code, "does not exist in our database") end unless miles.nil? or miles.valid_float? @spec.errors.add("Location radius") end # The input is valid iff the errors object is empty. @spec.errors.empty? end 在view中定制引用错误提示信息: <%= error_messages_for('spec').sub('prohibited this spec from being saved', 'occurred') %>
更多关注的书: Practical Rails Social Networking Sites (Expert's Voice) The Rails Way (Addison-Wesley Professional Ruby Series) Pro ActiveRecord: Databases with Ruby and Rails (Pro) Advanced Rails Recipes: 72 New Ways to Build Stunning Rails Apps Agile Testing with Ruby and Rails