Определите ожидаемые параметры для действия контроллера в Rails - PullRequest
0 голосов
/ 22 января 2011

Я помню, как однажды увидел возможность определять в верхней части контроллера параметры, необходимые для работы действия. На мой взгляд, я больше не могу найти упоминания об этой способности, и это было бы полезно для следующего:

def sort
  params[:links].each_with_index do |id, index|
    @link_set.links.in_context(context).update_all(['position=?', index+1], ['id=?', id])
  end
  render :nothing => true
end

Я ожидаю params [: links], поэтому, если какой-нибудь умник решит посетить это действие, не давая мне params, то оно завершится неудачно с nil.each_with_index.

Было бы неплохо изящно дать 404 или что-то, если параметры отсутствуют, без необходимости кодировать это в каждом методе этого типа.

Это существует? :)

Ответы [ 3 ]

3 голосов
/ 22 января 2011

Собственно, наткнулся на эту статью: http://rails.nuvvo.com/lesson/6376-action-controller-verification

Метод называется verify, и вы можете указать такие вещи, как ожидаемые параметры. :)

0 голосов
/ 22 января 2011

Попробуйте этот код:

before_filter :check_params

private
def check_params
    needed_params=[:links]
    needed_params.each do |x|
        render :text=>"Missing param #{x}", :status=>400
        return
    end

end

Поместите этот код в конец вашего класса.Это будет работать для каждого действия.Кроме того, вы хотите вернуть код ошибки 400 (неверный запрос), а не ошибку 404 (файл не найден).

0 голосов
/ 22 января 2011

Я не припоминаю существующую функциональность, которая позволяет вам это делать. Вместо этого вы можете использовать это в верхней части вашего действия:

params[:links] ||= []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...