2012-04-16 8 views
2

Я создаю API, используя рельсы, которые могут принимать довольно много параметров. В идеале, если пользователь включает в себя лишний, ненужный параметр в запросе случайно, который не делает запрос неоднозначным, я хотел бы обработать его как обычно. Это, очевидно, мешает мне просто писатьОтклонение дополнительных параметров url из параметров hash в rails

ApiRequest.new(params) 

так как UnknownAttributeError будет сгенерировано, если есть что-то дополнительное в Params хэш. Есть простой способ отклонения дополнительных атрибутов или мне придется написать метод для ручной проверки запроса перед созданием нового объекта. Кроме того, будет ли это считаться плохой практикой для API, должен ли я отвечать HTTP 400, если это произойдет?

Спасибо, Том

+0

Как вы определяете, какие атрибуты «лишние»? –

+0

Дополнительным я имею в виду все, что не в ActiveRecord, или определенное как атрибут в модели. В принципе, любой параметр, который не определен для этого конкретного действия API. –

+0

Вы можете получить все атрибуты модели, вызвав 'YourModel.attributes'. Затем вы можете отфильтровать любые дополнительные параметры. –

ответ

1

Спасибо за предложение Серхио, я в конечном итоге добавив следующий метод инициализации в моем классе ApiRequest, который позволяет мне массу назначать независимо от того, что находится в хэш. Если кто-то использует это, просто убедитесь, что вы гарантируете, что атрибуты attr_protected, если они должны быть.

def initialize(params) 
    params.delete_if {|k| !self.respond_to? "#{k}="} 
    super 
end 
Смежные вопросы