2012-12-09 112 views
9

我只是想知道什么推荐的方法将用于验证基于模型的表格而不是。我同意,通常所有的验证都应该在模型中完成,但是有些情况下特定的表单可能没有相应的模型。例如,一个任意的搜索表单。非模型的Rails验证

根据我目前的研究,还有据我可以看到这样做的主要有两种方式,

  1. 验证控制器。
    • 是否可以在控制器中使用Rails验证?我真的希望通过我自己的自定义代码来使用它们。

  2. 创建一个任意的类,例如:称为SearchForm并包括ActiveRecord::Validations
    • 该类应与模型一起存储(即使它不是真的)?
    • 建议这种方法的帖子表明你必须为ActiveRecord存储一堆方法,比如保存,保存!,update_attribute等等。这让我觉得不是非常Rubyesque!

  3. 其他建议?

回答

9

绝对#2ActiveModel::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功能的普通老红宝石模型,比如ActiveRecord,而不需要重新发明轮子。把ActiveAttr当成ActiveModel遗漏的东西。

+0

感谢您提供真正清晰简洁的答案以及所有其他提示! – richard