- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个两部分的问题。
如果我正在为其编写验证的模型继承自 ActiveRecord::Base
第一部分,我需要在该类中 include ActiveModel::Validations
吗? API对于 rails 没有说,但在这里 yehudakatz博客似乎暗示了这一点?
第二部分是放置这些验证器文件的最佳位置?在助手下或作为新模型或在库中?
我当前的验证器看起来像这样
class GenderValidator < ActiveModel::validator
def validate(record)
cred = /(\d{6})(\d{4})(\d{1})(\d{2})/.match(record.id_number.to_s) #breaks up the id into the relevent sections namely birthdate, gender, nationality, validator.
unless cred[0][/\d{13}/] #checks to see if the id is a valid length of numbers if it isnt then skip the validation of gender
return true
else
birthdate = cred[1] #returns a 6 digit string 'yymmdd'
parsed_gender = cred[2] #returns a 4 digit string '0001-4999:female 5000-9999:male'
nationality = cred[3] # should return either a 1 or a 0 1 if the person is foreign or 0 if the person is southafrican
validate_gender(parsed_gender, record)
end
end
private
def validate_gender(parsed_gender, record)
calculate_gender = (parsed_gender <= 4999 ? :female : :male)
unless employee.gender == calculate_gender
employee.errors[:gender] << "Your id indicates you have entered the wrong gender"
end
end
end
每个人的有效身份证号是可选的,但如果他们确实指定了它,它应该检查性别是否正确。
如果我将它保存在与员工模型相同的模型中,那么我会收到此错误
ActionController::RoutingError (uninitialized constant Employee::GenderValidator):
app/models/employee.rb:25:in `<class:Employee>'
app/models/employee.rb:1:in `<top (required)>'
lib/role_requirement_system.rb:19:in `inherited'
app/controllers/employees_controller.rb:1:in `<top (required)>'
librato-rails (0.8.1) lib/librato/rack/middleware.rb:12:in `call'
所以我认为它们不能在同一个文件中。验证的最佳实践是什么?我看了所有的 Rails 类型转换,也读过一些博客,但我还是个新手。
编辑
在我的模型中,我包含此类
include ActiveModel::Validations
我的验证看起来像这样
validates_presence_of :name, :position, :gender
validate :instance_validations, :on => :create
def instance_validations
validates_with GenderValidator
end
只是以防你也想看提前谢谢!
最佳答案
您不需要包含 ActiveModel::Validations
我倾向于将验证对象保留在模型文件夹中。
所以对于模型 Gender 你有一个文件gender.rb
对于验证器 GenderValidator,您有文件gender_validator.rb
所以两个文件一起放在模型文件夹中。
这是我的时事通讯模型的验证器
class NewsletterValidator < ActiveModel::Validator
def validate(record)
if record.send_test_email
if test_email_address.blank?
record.errors[:test_email_address] << "Test email address is blank"
end
if record.send_email_to_subscribers
record.errors[:send_test_email] << "You cannot send a test and send to subscribers at the same time"
end
end
end
end
在我的时事通讯模型中,我只有
validates_with NewsletterValidator
您的示例中有拼写错误
你有
class GenderValidator < ActiveModel::validator
应该是
class GenderValidator < ActiveModel::Validator
注意大写V
关于ruby-on-rails - Rails 放置 Activemodel::validators 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15001351/
在我的 Rails 3.2.11 和“开发”环境中,当我尝试使用事件模型时: class DisponibilityApi include ActiveModel::Model attr_ac
尝试将 Rails 6.0.0 与 Mongoid 6.1.0 结合使用 gem 'rails', '~> 6.0.0' gem 'mongoid', '~> 6.1.0' 已经尝试不在 Gemfil
我的 Controller 中有一个客户端模型和一个方法,应该返回最近的客户端。我正在使用 ActiveModel::Serializers 但它不起作用。 class ClientSerialize
使用 Rails 3 和 ActiveModel,我无法使用 self.用于获取基于 ActiveModel 的对象中属性值的语法。 在下面的代码中,在 save 方法中,self.first_nam
我正在做一个类似 DataMapper 的小型 ODM 项目,我正在尝试使用 ActiveModel::Validations 组件。然而,我在编写测试时遇到了一个问题——我使用匿名类来构建我的测试模
是否可以在运行时决定哪种类型在 ActiveModel::Attributes 中转换属性?我有以下代码 class DynamicType (my_model) { if my_model.
我在没有数据库后端的 Rails 3.1.1 项目中使用 ActiveModels。 我想知道如何将属性的类型设置为 String、Boolean、Decimal。 据我了解,当使用由数据库支持的 A
我一直在遵循关于创建和安装引擎的 rails 指南 here .创建博客文章,当我尝试发表评论时,它返回“ActiveModel::ForbiddenAttributesError in Blorgh
说我有这个序列化程序 class FooSerializer < ActiveModel::Serializer attributes :this, :that, :the_oth
这是我的问题的后续: Updating child association in ActiveModel 我正在寻找标准/正确的方法来更新与 parent 关联的许多子记录。 假设我有一个父表(使用
我有一个ActiveModel类,其实例仅在被触摸时才有效。以下代码有效: class Base include ActiveModel::Model validates :touched?,
我有一个ActiveModel类,其实例仅在被触摸时才有效。以下代码有效: class Base include ActiveModel::Model validates :touched?,
我有一个像这样使用的 httparty“模型” myRest = RestModel.new myRest.someGetResquest() myRest.somePostRequest() 我将如
我正在使用 Active Model Serializers v0.10.0.rc4 我想生成如下所示的 json: { "posts": [ { "post": {"id": 2, "n
如何获得 ActiveRecord 属性方法功能?我有这个类: class PurchaseForm include ActiveModel::Validations include Acti
我想实现的是获取验证失败的类型。它是空白的吗?复制 ?长度 ? class Film true, :uniqueness => true, :length => { :maximum => 100
我正在使用设计来注册我的用户。我正在自定义注册 Controller 的创建操作,但是每当我尝试创建任何新用户时,它都会被拒绝,并且出现上述错误。我知道我必须允许所需的参数,而且我这样做了,所以我不明
我有 2 个模型,它们都在“Loot”下命名 战利品::截图收藏 belongs_to :agent has_many :screenshots, class_name: 'Loot::Screens
从 Controller 使用序列化程序时,我可以像这样向它传递额外的选项 render json: user, some_option: 'foobar 那我可以引用some_option在序列化程
我有一种情况,其中用户将一些数据提交到将在后台处理的 Web 服务器(Rails): POST /fibonacci/6012 HTTP/1.1 Host: example.com 服务器响应一个指向
我是一名优秀的程序员,十分优秀!