从rails中的params散列中拒绝额外的url参数

时间:2012-04-16 21:51:17

标签: ruby-on-rails api

我正在使用可以使用相当多参数的rails构建API。理想情况下,如果用户在请求中包含一个额外的,不必要的参数,这不会使请求模糊不清,我想像往常一样处理它。这显然阻止我简单地写

  ApiRequest.new(params)

因为如果params散列中有任何额外的内容,将抛出UnknownAttributeError。是否有一种拒绝额外属性的简单方法,或者我必须编写一个方法来在创建新对象之前手动验证请求。此外,如果发生这种情况,我是否应该使用HTTP 400进行响应?

谢谢, 汤姆

1 个答案:

答案 0 :(得分:1)

感谢Sergio的建议,我最终在我的ApiRequest类中添加了以下初始化方法,这允许我无论散列中的内容是什么都可以进行大量分配。如果有人使用它,请确保在需要时确保属性为attr_protected。

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