ruby-on-rails – Rails的“验证”是什么类型的语言结构?
我刚刚开始研究
Ruby.我的背景是.NET和
PHP.在Rails中,我也确定在其他框架中,我在类上看到这样的东西:
class Person < ActiveRecord::Base validates :terms_of_service,:acceptance => true end 什么是“验证”?这是一个功能吗?如果它是一个函数,验证如何实际工作,因为你没有告诉验证函数你正在验证哪个模型? 我在哪里可以阅读更多关于它在幕后如何实际工作的内容? 解决方法
它有点复杂 – 但简短的回答是,validates是Person的类方法,继承自ActiveRecord :: Base.该行同样可以写成验证(:terms_of_service,:acceptance => true).
Ruby与许多解释语言一样,有效地“执行”类定义,因此当遇到validates行时,它将其视为一个方法调用,其中当前自身对象是表示类Person的Class类的实例,继承自的ActiveRecord :: Base的.它调用该方法,该方法具有将验证器挂钩到Person类的效果. 您可以阅读有关方法here的信息 – 但请注意,这会增加更多的混淆,因为它将该方法列为ActiveModel :: Validations :: ClassMethods的实例方法.咦?好吧,Ruby有两种方法从另一个模块中获取功能并将它放入你的类中 – 你可以包含模块(在这种情况下它的实例方法成为你的类的实例方法),或者扩展模块(在这种情况下它的实例)方法成为你班级的班级方法). 因此,总结一下:validates被声明为ActiveModel :: Validations :: ClassMethods的实例方法,它被扩展到ActiveRecord :: Base.因此,validates是ActiveRecord :: Base的类方法,并且通过继承,Person.代码段中的行只是一个方法调用. 然而,尽管如此,大多数Rubyist和Railsists将在很大程度上忽略这些事实;验证是所谓的“装饰者”,大多数人只会将其作为关于人的陈述阅读. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |