我只是想知道基于模型验证不的表单的建议方法是什么。我同意通常所有验证都应该在模型中完成,但有些情况下特定的表单可能没有相应的模型。例如,任意搜索表单。
根据我目前的研究,据我所知,有两种主要方法可以做到,
SearchForm
并包含ActiveRecord::Validations
答案 0 :(得分:10)
绝对#2 。您正在寻找 ActiveModel::Validations API
class ArbitrarySearch
include ActiveModel::Validations
attr_accessor :query
validate :query, :presence
end
至于应该去哪里,是的,它应该进入app/models
。如果您像我一样认为扩展ActiveRecord::Base
的模型和不在同一目录中共存的模型混合起来很有趣,请考虑在您的config/application.rb
文件中添加以下内容
config.autoload_paths += Dir["#{config.root}/app/models/**/"]
现在,您可以按照自己喜欢的方式组织模型文件。对我来说,我有
- app
|
|- models
|
|- table
|- tableless
|- observer
我将ArbitrarySearch
班级的课程放到app/models/tableless/arbitrary_search.rb
。
将ActiveRecord模型中使用的此功能和其他常用功能转换为名为 active_attr 的通用非基于表的模型类,有一个很棒的宝石。
ActiveAttr是一组模块,可以轻松创建具有ORM中功能的普通旧ruby模型,如ActiveRecord,而无需重新发明轮子。将ActiveAttr视为ActiveModel遗漏的东西。