Помогите интерпретировать этот бит кода Rails - PullRequest
1 голос
/ 14 мая 2009

Что это?

"#{h params[:chat_input]}"

Я имею в виду хэш # и h.

Ответы [ 6 ]

8 голосов
/ 14 мая 2009

Скорее всего, это внутри строки в двойных кавычках, например, "Ponies all love #{h params[:chat_input]}!" Выражение #{stuff} вызывает интерпретацию выражения stuff и вставку в строку. Например, "1 + 2 = #{1 + 2}" приведет к строке "1 + 2 = 3".

h является псевдонимом метода html_escape, что само собой разумеется.

4 голосов
/ 14 мая 2009

"# {h params [: chat_input]}"

В ruby ​​строки в двойных кавычках позволяют вычислять выражения и автоматически преобразовывать их в строки.

Я могу сделать это:

years = 25
"John is " + years +  " years old"  

но я получу ошибку, потому что не могу добавить число в строку.

Я могу сделать

"John is #{years} years old"

чтобы обойти это.

Метод h () - это вспомогательная функция Rails, которая удаляет теги HTML. Это вещь безопасности.

Наконец, params () - это метод в Rails, который дает вам доступ к параметрам GET и POST. Это фактически перенос хеша. GET и параметры POST символизируются для уменьшения памяти (символы определяются только один раз, тогда как строка типа "foo" каждый раз является новым объектом.)

Итак, params [: chat_input] извлекает значение из параметров GET или POST предыдущего запроса, и в вашем случае это выглядит так, будто он просто отображает и очищает их.

Надеюсь, это поможет!

4 голосов
/ 14 мая 2009

Код, который вы вставляете, сам по себе является просто комментарием. Я предполагаю, что код находится внутри строки.

"hello, #{5 + 5}"
# => hello, 10

Оператор в скобках будет оцениваться как Ruby. Это называется интерполяцией строк.

Оператор внутри интерполяции в вашем коде - это метод, который получает аргумент.

h params[:chat_input]
h(params[:chat_input])

Метод h является ярлыком для html_escape, который экранирует HTML. Например, <span> преобразуется в &lt;span&gt;, чтобы браузер отображал фактическое содержимое строки вместо интерпретации его как HTML.

html_escape(params[:chat_input])

Вы, наверное, знаете, что такое params.

Подводя итог, вы можете получить HTML-версию, исключающую все параметры [*: chat_input].

1 голос
/ 14 мая 2009
h(something)

или

h something

, поскольку ruby ​​не заставляет использовать (), это функция, доступная в rails, которая преобразует параметр в строку «безопасного HTML», избегая интерпретации возможного HTML-кода внутри переменной «что-то».

"#{x}"

в ruby ​​означает преобразование переменной x в строку и размещение ее в новой строке, например:

"#{host}:#{port}"

поместит значение хоста и значение порта в новую строку, образованную символом "", таким образом, что если host является "localhost", а port равен 30, строка результата будет "localhost: 30"

params - это специальный хеш rails, который содержит параметры post / get, передаваемые выполняемому методу контроллера

другая деталь в том, что в ruby ​​метод всегда возвращает последнее вычисленное выражение

поэтому метод

def test
   "#{h params[:chat_input]}"
end

вернет строку с HTML-безопасным значением параметра post / get chat_input

1 голос
/ 14 мая 2009

Это просто интерполяция значения внутри строки. : Chat_input является символом, он используется вместо строки, потому что символы создаются только один раз.

0 голосов
/ 16 мая 2009

Святое дерьмо, это случайно из chat_sandbox ?

если это так, дайте мне знать, если вам нужна помощь $)

Я надеюсь вскоре обновить этот код.

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