rails url_helper размещает параметры там, где должен быть формат - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь получить сгенерированные Rails методы _path, чтобы дать мне

/terms_and_conditions?utm_source=source&utm_campaign=pain#some_link

Итак, я попробовал следующее в контроллере:

utm_params = {"utm_source" => "sauce", "utm_campaign" => "pain"} # from params
redirect_to terms_and_conditions_path(utm_params.merge(anchor: 'some_link')

и я получаю это с привязкой в ​​качестве параметра:

/terms_and_conditions?anchor=some_link&utm_source=source&utm_campaign=pain

Если я попытаюсь

terms_and_conditions_path(utm_params, anchor: 'some_link')

Я получу хэшвместо формата вместо правильных параметров (т. е. нет ?):

/terms_and_conditions.utm_source=source&utm_campaign=pain#some_link

Как мне передать параметры и добавить привязку?

1 Ответ

0 голосов
/ 01 июля 2019

Ну, это помешанные.

Похоже, проблема в том, что Hash vs HashWithIndifferentAccess; когда вы делаете params.to_h, вы получаете HashWithIndifferentAccess - который помощники URL не рассматривают как Hash, и он не может вытащить якорь - так что якорь становится частью параметров.

params.to_hash дает вам "настоящий" хеш; слияние anchor: 'blah' работает как положено.

(примечание: изначально я думал, что это потому, что ключи были строками - но это была красная сельдь; HashWithIndifferentAccess#symbolize_keys возвращает реальный хеш)

На данный момент, я бы хотел сослаться на автоматически сгенерированные x_path api docs, но я почти уверен, что их просто не существует, и код должен сбивать с толку. Метод проб и ошибок выиграл день здесь.

...