# Views The view is the scene for our show. The user is sitting in his chair (the browser) and see on screen actors (the view). Enjoy the show without think that behind the scenes there is a whole team. The team behind the cameras is our controller but the user don't care about that. The user only see their browser and our application is just and HTML document. ## Camping Views Inside the Nut::Views module, we will write methods. That method shall called with the render sentence. The views do not use class. ```ruby module Nust::Views def post_number p "you asked the post number @post" end end ``` Well, well, that was a views, but now: How we show it to the user? We will call the view from the controller. And we pass to the view all the parameters that we want to show. ```ruby module Nuts::Controller class PostN def get number @postn=number render :post_number end end end ``` We just declared a controller for the route /post/(number here). When the browser ask for the route /post/1 the controller will be trigged and the get method defined inside the class, will respond to the "get" request in the web server. The first instruction in our controller, will by write the number in the @postn variable and then "render" But what is `render`? This sentence is not from ruby, this is a camping's sentence and mean: -show now the view named (:symbol). It take a symbol as parameter, and the symbol's name, shall be one of these methods declared in the views. Now we have only a view named post_number. You could "associate" it MENTALLY as a hash like this: ```ruby def my_view => render :my_view ``` But that will happen in your mind. In camping these will be happening in the modules, not in a hash, therefore, their are very associated too. Imagine your applications as a big building. The controller as the corridors and the views as the offices. Where are the offices and we do in each office? ## Views and Controllers Model View and Controller, are joined but not scrambled. The views use R(ControllerName) for call the controllers and "move". The controller will use "render" for call the view. -And now... what do you think we have behind the curtains? ```ruby module Why::Controllers class CircusCourtains def get require 'endertromb' @monkey=Endertromb::Animals::StartMonkey.new :frog=>true,:place=>:hand render :behind_curtain end end end ``` -OMG! It's a monkey with a start in the hand! -yes, ladies and gentleman, we have it just here for you ```ruby module Views def behind_curtain p @monkey end end ``` No, we don't have it behind the curtains, but the user believe it. There is the view, enjoy the show. ## Template engine We spoke about the views, and HTML, but we are not using html's tags for our view... How happening this? The rubyist have not necessary to write HTML code. Exists some options named template. That the "p" before the `@monkey` in the view. A template engine is a kind of "pseudo-language" for handle HTML code. In some template engines you will also write HTML in a more easy way. Their also handle ruby data inside HTML. Templates engine are the wheels of the views. In camping, you will write views using a template engine named [Markaby](05_more_about_markaby.md) and you will write HTML pragmatically.