如果这是一个非常常见和/或荒谬的问题,我们深表歉意;我发誓我已经多次阅读文档,所有内容似乎都如此专注于 ActiveRecord,以至于他们已经偏离了创建或编辑模型数据之外的表单路径。
以带有输入的表单为例,以控制某些统计数据的提取和显示。Rails 为我提供了什么来验证此表单的用户输入,它不会save
在任何记录上调用?像:
:email
必须是电子邮件地址:num_products
必须是正整数:gender
必须是“M”或“F”之一:temperature
必须在 -10 到 120 之间
等等(大多数网络框架中标准的那种东西)......
Rails 中有什么东西可以让我执行这个任意验证,还有一些视图助手来显示错误列表,还是所有东西都与 ActiveRecord 相结合?
如果我在文档中忽略了这一点,我深表歉意,但是这和这并没有真正涵盖它,至少就 mt 疲倦的眼睛所能看出的而言。
抓头
感谢 Rob 的回答,这就是我想出的。我创建了一个实用程序类(恰当地命名为Validator
),它只是嵌入到我的控制器中,用于任何需要它的东西。
module MyApp
class Validator
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(attributes = {})
super
attributes.each { |n, v| send("#{n}=", v) if respond_to?("#{n}=") }
end
end
end
现在在控制器中,例如,只需定义一个小内联类:
class LoginController < ApplicationController
class AuthenticationValidator < MyApp::Validator
attr_accessor :email
attr_accessor :password
validates_presence_of :email, :message => "E-mail is a required field"
validates_presence_of :password, :message => "Password cannot be blank"
end
def authenticate
if request.post?
@validator = AuthenticationValidator.new(params)
if @validator.valid?
# Do something meaningful
end
end
end
.rb
恕我直言,当逻辑更面向控制器时,将每一组验证规则都放在自己的位置上感觉有点不必要。可能有一种更简洁的方式来写这个,但我对 Ruby 和 Rails 还是很陌生。