Как мне получить параметры в rails, которые только из URL?

#javascript #ruby-on-rails

#javascript #ruby-on-rails

Вопрос:

Я пишу монтируемый на rails gem, который запускает пользовательские события javascript на основе того, какой контроллер и действие отображаются.

Я хотел бы добавить функцию, при которой параметры из URL-адреса будут доступны обработчикам событий:

 // 'PATCH /users/:user_id/tasks/:id'
$(document).on('tasks#update', function(data, params){
  console.log(params['user_id'], params['id']);
});
  

По соображениям безопасности я хотел бы ограничить это параметрами, которые исходят из URL, а не из тела запроса.

Поскольку это библиотека, а не код приложения, я не могу просто использовать URI.parse , поскольку сопоставления ключей неизвестны.

Как мне получить подмножество параметров, которые соответствуют только маршрутизатору?

Комментарии:

1. Полный источник для gem находится по адресу github.com/maxcal/pagescript .

2. Попробуйте request.env['action_dispatch.request.path_parameters'] . Если вам также нужны остальные параметры строки запроса (не совпадающие с маршрутизацией), вы можете использовать request.env['action_dispatch.request.query_parameters']

3. Спасибо @AlexandreAngelim, я полностью пропустил ваш комментарий в шуме, но он указал мне правильное направление.

Ответ №1:

Из контроллера (или помощника в данном случае) вы можете получить подмножество из request.path_parameters и request.query_parameters .

 def body_tag(**opts)
  options = opts.deep_merge(
    data: request.path_parameters.merge(request.query_parameters)
  )
  if block_given?
    content_tag(:body, options) { yield }
  else
    tag(:body, options, true)
  end
end