On Github vlasiak / rails_controllers_presentation
Controller is the C in MVC. The controller receives the request, fetch or save data from a model and use a view to create HTML output.
When your application receives a request, the routing will determine which controller and action to run, then Rails creates an instance of that controller and runs the method with the same name as the action.
class ClientsController < ApplicationController def new end end
As an example, if a user goes to /clients/new in your application to add a new client, Rails will create an instance of ClientsController and run the new method.
class ClientsController < ApplicationController # The URL for this action would look like this in order to list activated # clients: /clients?status=activated def index if params[:status] == "activated" @clients = Client.activated else @clients = Client.inactivated end end end
class PeopleController < ActionController::Base def create Person.create(person_params) end private def person_params params.require(:person).permit(:name, :age) end end
The Rails router recognizes URLs and dispatches them to a controller's action. It can also generate paths and URLs, avoiding the need to hardcode strings in your views.
Rails RoutingREST is an architecture style for designing networked applications. Every resource has its unique URI. RESTful applications use HTTP requests to post data (create and/or update), read data (e.g., make queries), and delete data. Thus, REST uses HTTP for all four CRUD (Create/Read/Update/Delete) operations. So we can manipulate that object using its URI and HTTP actions.
Practical using in RailsFilters are methods that are run before, after or "around" a controller action.
class ApplicationController < ActionController::Base before_action :require_login private def require_login redirect_to new_login_url unless logged_in? end endFilters
HTTP is as STATELESS protocol. Stateless protocol is a communications protocol that treats each request as an independent transaction that is unrelated to any previous request so that the communication consists of independent pairs of request and response.
Your application has a session for each user in which you can store small amounts of data that will be persisted between requests. The session is only available in the controller and the view.
Accessing the Session ExamplesYour application can store small amounts of data ON THE CLIENT - called cookies - that will be persisted across requests.
Accessing the Cookies ExamplesThe flash is a special part of the session which is cleared with each request. This means that values stored there will only be available in the next request, which is useful for passing error messages etc.
class LoginsController < ApplicationController def destroy session[:current_user_id] = nil flash[:notice] = "You have successfully logged out." redirect_to root_url #redirect_to root_url, notice: "You have successfully logged out." end end
class UsersController < ApplicationController def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render xml: @users} format.json { render json: @users} end end end
Created by Vasyl Lasiak / @vlasiak