2012-04-16 64 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