Почему ruby контроллер будет экранировать параметры сам? - PullRequest
0 голосов
/ 27 февраля 2020

Я пишу Ruby приложение для бэк-энда. Есть контроллер, который будет принимать запрос от внешнего интерфейса.

В этом случае есть запрос GET с параметром, содержащим символ "\ n".

    def register
        begin
            request = {
                id: params[:key]
            }
            .........
        end
    end

Параметр "ключ" передается от AngularJs как "---- НАЧАЛО ----- \ n abcd \ n ---- КОНЕЦ ---- \ n ", но в контроллере Ruby параметр стал" ---- BEGIN ----- \\ n abcd \\ n ---- END ---- \\ n "на самом деле.

У кого-нибудь есть для этого хорошее решение?

1 Ответ

1 голос
/ 27 февраля 2020

Да, это из-за ruby способа чтения escape-символа. Вы можете прочитать объяснение прямо здесь: Экранирующие символы в Ruby

Однажды я получил эту проблему, и я просто использую gsub!, чтобы изменить \\n на \n. Что вы должны сделать, это:

def register
  begin
    request = {
      id: params[:key].gsub!("\\n", "\n")
    }
    .........
  end
end

Помните, вы должны использовать двойные кавычки " вместо одинарных кавычек '. По ссылке, которую я дал:

Разница между одиночными и двойными кавычками в Ruby заключается в том, как определения строк представляют escape-последовательности.

В строках с двойными кавычками вы можете писать escape-последовательности и Ruby выведет их переведенное значение. A \ n становится новой строкой. Однако в одиночных кавычках экранирующие последовательности экранируются и возвращают свое буквальное определение. A \ n остается \ n.

...