2012-12-09 133 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