2012-04-16 60 views
2

我正在使用rails來構建API,這可能需要很多參數。理想情況下,如果用戶在請求中包含了一個額外的,不必要的參數,而這個請求不會造成請求不明確,我想按正常方式處理。這顯然阻止我簡單地寫從軌道中的params哈希中拒絕額外的url參數

ApiRequest.new(params) 

因爲一個UnknownAttributeError如果有什麼額外的params哈希表將被拋出。有沒有簡單的方法來拒絕額外的屬性,或者我必須編寫一個方法來手動驗證請求,然後再創建一個新的對象。另外,這會被認爲是不好的API實踐,如果發生這種情況,我應該用HTTP 400做出響應嗎?

感謝, 湯姆

+0

你如何決定什麼屬性是'額外'? – 2012-04-16 21:52:37

+0

額外我只是指任何不在ActiveRecord中或定義爲模型中的屬性。基本上沒有爲特定API操作定義的任何參數。 – 2012-04-17 08:34:36

+0

您可以通過調用'YourModel.attributes'來獲取所有模型屬性。然後你可以過濾掉任何額外的參數。 – 2012-04-17 09:19:16

回答

1

感謝您的建議塞爾吉奧,我最終加入我ApiRequest類以下initialize方法,讓我的質量分配,無論是什麼樣的哈希值。如果有人使用這個,只要確保你的屬性是attr_protected,如果他們需要。

def initialize(params) 
    params.delete_if {|k| !self.respond_to? "#{k}="} 
    super 
end