这是什么?
"#{h params[:chat_input]}"
我指的是哈希#
和h
。
答案 0 :(得分:8)
很可能这是在双引号字符串中,例如"Ponies all love #{h params[:chat_input]}!"
#{stuff}
表达式导致stuff表达式被解释并插入到字符串中。例如,"1 + 2 = #{1 + 2}"
将生成字符串"1 + 2 = 3"
。
h
是html_escape
方法的别名,这是非常不言自明的。
答案 1 :(得分:4)
您粘贴的代码本身只是一个评论。我假设代码在字符串中。
"hello, #{5 + 5}"
# => hello, 10
括号内的语句将被评估为Ruby。这称为字符串插值。
代码中插值内的语句是一个获取参数的方法。
h params[:chat_input]
h(params[:chat_input])
h
方法是html_escape
的快捷方式,它可以转义HTML。例如,<span>
转换为<span>
,以便浏览器显示字符串的实际内容,而不是将其解释为HTML。
html_escape(params[:chat_input])
您可能知道params
是什么。
总而言之,您将获得任何params [:chat_input]包含的HTML转义版本。
答案 2 :(得分:4)
“#{h params [:chat_input]}”
在ruby中,双引号字符串允许计算表达式并自动转换为字符串。
我可以这样做:
years = 25
"John is " + years + " years old"
但我会收到错误,因为我无法将数字添加到字符串中。
我能做到
"John is #{years} years old"
绕过那个。
h()方法是一个删除HTML标记的Rails辅助函数。这是安全的事情。
最后,params()是Rails中的一种方法,它允许您访问GET和POST参数。它实际上是包装散列GET和POST参数被符号化以减少内存(符号只定义一次,而像“foo”这样的字符串每次都是一个新对象。)
因此,params [:chat_input]从前一个请求的GET或POST参数中检索值,在您的情况下,它看起来只是显示和清理它们。
希望有所帮助!
答案 3 :(得分:1)
它只是在字符串中插入一个值。 :chat_input是一个符号,它用于代替字符串,因为符号只创建一次。
答案 4 :(得分:1)
h(something)
或
h something
因为ruby不强制使用(),所以rails中的一个函数可以将参数转换为“安全的HTML”字符串,从而避免解释'something'变量中可能的HTML代码。
"#{x}"
ruby中的表示将x变量转换为字符串并将其放在新字符串中,例如:
"#{host}:#{port}"
将host的值和port的值放入由“”形成的新字符串中,如果host为“localhost”且port为30,则结果字符串为“localhost:30”
params是一个特殊的rails hash,包含传递给正在执行的控制器方法的post / get参数
另一个细节是,在ruby中,方法总是返回最后一次计算的表达式
所以方法
def test
"#{h params[:chat_input]}"
end
将返回一个字符串,该字符串具有post / get参数chat_input
的HTML安全值答案 5 :(得分:0)