我正在尝试运行一个用于应用程序主页的表单,该表单同时使用无表变量和数据库存储变量。我需要在表单上运行验证。我需要运行验证,特别是比较两个无表值的验证。
我的最终目标是通过以下 gem 让验证在客户端运行: https ://github.com/bcardarella/client_side_validations 最初,我希望验证在表单提交时工作。
出现的第一个问题是哪个模型应该保存邮件验证逻辑。主页要做很多事情,不是模型,最重要的是,搜索结果会导致不同的控制器。
随后,虽然有些验证是一次性的,并不需要真正分解,但我会将验证逻辑放在 app/validators/different_objects_validator.rb
class DifferentObjectsValidator < ActiveModel::Validator
def different_objects
errors.add(:different_objects, "cannot be less than quantity") unless
self.quantity >= self.different_objects
end
end
表单数据为:
<%= form_tag result_quote_request_path, :method => :get do %>
Base <%= number_field :quote, :base, :size => 5 %>
Height <%= number_field :quote, :height, :size => 5 %>
Quantity <%= number_field :quote, :quantity, :size => 5, :value => 1 %>
Different source objects <%= number_field :quote, :different_objects, :size => 5, :value => 1 %>
<%= submit_tag "find", :name => nil %>
<% end -%>
然后
class Quote < ActiveRecord::Base
include ActiveModel::Validations
validates :different_objects, different_objects_valid => true
重新启动瘦 Web 服务器后,结果如下:
ActionView::Template::Error(nil:NilClass 的未定义方法“名称”):
但这有点牵强附会:没有验证,表单会生成搜索结果
我意识到这里可能有很多事情是错误的。我无法正确关注调用验证的位置以及无表状态。