我如何驗證Ruby中的attr?我如何驗證Ruby中的屬性
我的文件airplane.rb
class Airplane
include Validatable
attr_reader :aircraft_type, :weight
attr_accessor :speed, :altitude, :course
def initialize(aircraft_type, options={})
@aircraft_type = aircraft_type.to_s
@course = options[:course] || random_course
@weight = options[:weight] || rand(1...1000)
@speed = options[:speed] || rand(1...500)
@apltitude = options[:apltitude] || rand(50...3000)
@position_x = options[:position_x] || rand(1...3000)
@position_y = options[:position_y] || rand(1...3000)
check_course
end
def position
@position = [@position_x, @position_y]
end
def check_course
if @course < 1
@course = 1
puts "Invalid course. Set min"
elsif @course > 360
@course = 360
puts "Invalid course. Set max"
else
@course = @course
end
end
def random_course
@course = rand(1..360)
end
末,所有值都必須進行檢查
module Validatable
@@validations={}
# I need receive = {presence: [:weight, :length], aircraft_type: [:length]}
def self.validates_presence_of(*attrs)
@@validations[:presence] = attrs
end
def validate
@@validations.each do |v, fields|
fields.each {|field_name| self.send("validate_#{v}_of", field_name)}
end
end
private
def validate_presence_of(field_name)
end
末
我的文件初始化
我的文件validatable.rb。 rb with airplanes attr
airplane1 = Airplane.new("Boeing 74", course: 600, speed: 300, apltitude: 300)
airplane2 = Airplane.new("Boeing 700", course: 250, speed: 300, apltitude: 300)
airplane3 = BigAirplane.new("Boeing 707", weight: 50, speed: 300, apltitude: 400)
我該如何完成validatable.rb來驗證每架飛機的每個值?
當您實例化對象時,您正在使用默認值加載它。因此,如果用戶以後專門將其更改爲零,則它們將僅爲零。請更好地解釋流程。另外,你有沒有看過rails activerecord驗證?您可以包含它,而無需ORM的其餘部分。 – Anil