To provide different responses to different requests - taking the user to different pages / down different paths, to update or access different information, depending on the different requests (GET, POST, DELETE, etc.)
You can pass in instance variables (without explicitly passing them through the :locals hash) or local variables (in which case you must explicitly use the :locals hash ex: erb(:index, :locals => {:example => example})
By using embedded ruby files (.erb) and placing all code you want to display within: <%= code_to_display %> and content you want to simply run within: <% code_to_run %>
Any and all data submitted by users comes in as a hash called "params"
Params is a hash containing all information submitted by the client, via forms. They are available to be used in .erb files, as variables, ex: params[:example_param]
It's important to note that not all data in the params hash has to come from the user, but yes, data from the user comes through in the params.