views:

223

answers:

6

What is this?

"#{h params[:chat_input]}"

I am referring to the hash # and the h.

+8  A: 

Most likely this is inside a double-quoted string, such as "Ponies all love #{h params[:chat_input]}!" The #{stuff} expression causes the stuff expression to be interpreted and inserted into the string. For example "1 + 2 = #{1 + 2}" will result in the string "1 + 2 = 3".

The h is an alias to the html_escape method, which is pretty self-explanatory.

Pesto
also, #{} is ruby, not rails specific
Matt Briggs
+1  A: 

It's just interpolating a value inside a string. The :chat_input is a symbol, it's used in place of a string because symbols are only created once.

Geo
+4  A: 

The code you paste, by itself, is just a comment. I assume the code is inside a string, though.

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

The statement inside the brackets will be evaluated as Ruby. This is called string interpolation.

The statement inside the interpolation in your code is a method that gets an argument.

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

The h method is a shortcut for html_escape, which escapes HTML. For example, <span> is converted into &lt;span&gt;, so that the browser displays the actual contents of the string, instead of interpreting it as HTML.

html_escape(params[:chat_input])

You probably know what params is.

To sum up, you get a HTML escaped version of whatever params[:chat_input] contains.

August Lilleaas
+1  A: 
h(something)

or

h something

since ruby does not force the use of (), is a function available in rails that converts the parameter to a "safe HTML" string avoiding interpreting the possible HTML code inside of the 'something' variable.

"#{x}"

in ruby means converting the x variable to a string and placing it in the new string for example:

"#{host}:#{port}"

will place the value of host and the value of port into the new string formed by the "", in a way that if host is "localhost" and port is 30 the result string will be "localhost:30"

params is a special rails hash that contains the post/get parameters passed to the controller method being executed

another detail is that in ruby a method always returns the last evaluated expression

so the method

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

will return a string that has the HTML-safe value of the post/get parameter chat_input

Edu
+4  A: 

"#{h params[:chat_input]}"

In ruby, double-quoted strings allow for expressions to be evaluated and automatically converted to strings.

I can do this:

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

but I'll get an error because I can't add the number to a string.

I can do

"John is #{years} years old"

to get around that.

The h() method is a Rails helper function that removes HTML tags. It's a safety thing.

Finally, params() is a method in Rails that gives you access to GET and POST parameters. It's actually wrapping a hash GET and POST parameters are symbolized to reduce memory (symbols are only defined once, whereas a string like "foo" is a new object every time.)

So, params[:chat_input] retrieves the value from the previous request's GET or POST parameters, and in your case it looks like it's just displaying and sanitizing them.

Hope that helps!

Brian Hogan
A: 

holy crap, is that from chat_sandbox by any chance?

if so, let me know if you need any help $)

I'm hoping to update that code here soon.

taelor