Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Ruby

Bryan Guillen
Bryan Guillen
1,051 Points

ruby on rails params[] hash explained?

Hey TreeHouse,

I am a bit confused on the subject of params hash...

I have looked everywhere for some sort of simple definition. But, I couldn't find anything...

What exactly are params hashes? Also, why would I use them?

Example,

    class SessionsController < ApplicationController 

    def create
        user = User.find_by(email: params[:sessions][:email].downcase
        if user && user.authenticate?(params[:sessions][:password])
    end    

    end

In the example above, I know that find_by is used in order to retrieve the user, and the tutorial even goes on to include "strong user params". However I am not so clear on why the params are included. By the way, I completely understand hashes and arrays. This is strictly for params.

Thank You, Bryan G.

Alan Matthews
Alan Matthews
10,161 Points

The params comes from the users browser. The values come from a GET query string, POST form data, or the path of the URL. Rails has a to_param method to make the requests into hashes I believe.

http://www.example.com/?foo[string]=bar&foo[other_string]=baz would equal params[:foo] would be a hash and params[:foo][:string] would be "bar" and params[:foo][:other_string] would be "baz".

Link to Rails Guides on params: http://guides.rubyonrails.org/action_controller_overview.html#parameters

Bryan Guillen
Bryan Guillen
1,051 Points

Ah, I see... Thanks Alan... Very Helpful.... Thanks.

2 Answers

For the purposes of coding most of the time, all you need to know is that the 'params' is a hash of key/value pairs assigned to a variable called 'params'. For what you're probably dealing with most of the time, you just need to know it's inside http requests and you can access it in your controllers.

An easy way to see it is to put a p params inside one of your controller methods (I'll let you work out which one), and then you'll be able to see it in your local server readout.

It might look like this:

{"title"=>"Awesome title", "content"=>"Lorem ipsum innocuous but awesome text"}

In one of your controller methods, if you did:

Post.create(title: params["title"], content: params["content"])

...you would create a Post that had a title of "Awesome title" and content of "Lorem ipsum inoccuous but awesome text".

'Strong params' is a bit harder to get your head around, but it's a Railsey thing and I recommend reading the Rails Guides carefully on it and googling for some explanations and then posting a separate thread up if you're still not sure about it.

Ryan Dsouza
Ryan Dsouza
9,388 Points

If the question still exists in your head, try this link. The explanation is as clear as it can be

http://api.rubyonrails.org/classes/ActionController/Parameters.html