2012-10-16 20 views
2

我正在設計一個REST API,並且要驗證請求參數的存在,長度等。驗證請求參數的最佳Ruby庫

舉例來說,我想驗證的東西,如:

  • 在請求中提供「姓名」
  • 是「名」 < 200字符
  • 是「年齡」的數值
  • 是提供
  • 「CUSTOMER_ID」必須被提供的任何未知參數,如果「名稱」不存在

再檢查參數是這樣的:

request.valid? 

我在考慮使用DataMapper的(或+了Virtus Aequitas)或類似的東西。但DataMapper或另一個ORM只有很多我不需要的功能。

你將如何處理這個問題,如果使用一個你可以推薦的ORM(根據依賴數量和需要的「驗證代碼」)?

回答

1

你可以使用ActiveModel::Validations

這讓很多驗證,如驗收,協會,確認,排除,格式等。例如:

class Person 
    include ActiveModel::Validations 

    validates :name, :surname, presence: true 
    validates :city, length: { minimum: 5 } 
    validates :age, numericality: { greater_than: 18 } 
end 

# Example: 
p = Person.new 
p.valid? # => false 

我建議你看一看的ActiveRecord Validations & Callbacks Rails guide

通常,這些驗證與ActiveRecord ORM一起使用,但您可以在沒有ActiveRecord的情況下使用它,如您所見in this ActiveModel RailsCast。 因此,您只需包含ActiveModel::Validations即可。

+0

有沒有'ActiveModel :: Validations'gem或者什麼東西不依賴於ActiveRecord?總共需要 – Parnas

+0

,只需要'active_model'。然後你可以按照大部分Yehuda Katz的帖子http://goo.gl/Umjtn「ActiveModel:讓任何Ruby對象感覺像ActiveRecord」 – louiscoquio

+0

嗯,我猜'active_model'是一個可以接受的解決方案。我希望有更像DataMapper(Virtus + Aequitas)的解決方案,因爲代碼看起來更清晰。但不幸的是,這些圖書館還不成熟,至少不是Aequitas。 – Parnas

1

使用已經通過rails驗證提供了name,age。裁判this

validates :name, presence: true, :length => { :maximum => 200 } 
    validates :age, allow_blank: true, :numericality => {:greater_than => 18, :less_than => 100} 

對於自定義的驗證使用以下

validate :some_validation_method 

def some_validation_method 


end 
+0

你說的是ActiveModel,不是直接Rails,即使它現在在它的核心中 – louiscoquio