#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