帮助解释这一点Rails代码

时间:2009-05-14 13:06:22

标签: ruby-on-rails ruby

这是什么?

"#{h params[:chat_input]}"

我指的是哈希#h

6 个答案:

答案 0 :(得分:8)

很可能这是在双引号字符串中,例如"Ponies all love #{h params[:chat_input]}!" #{stuff}表达式导致stuff表达式被解释并插入到字符串中。例如,"1 + 2 = #{1 + 2}"将生成字符串"1 + 2 = 3"

hhtml_escape方法的别名,这是非常不言自明的。

答案 1 :(得分:4)

您粘贴的代码本身只是一个评论。我假设代码在字符串中。

"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是什么。

总而言之,您将获得任何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)

神圣的废话,是chat_sandbox的任何机会吗?

如果是,请告诉我您是否需要任何帮助$)

我希望尽快更新该代码。