MVC (Rails)
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Motif | Modèle-Vue-Contrôleur |
| Framework | Rails |
| Modèle | ActiveRecord::Base
|
| Voir aussi | Helper (Rails) · REST (Rails) |
Le motif Modèle-Vue-Contrôleur (MVC) structure une application Rails : le routage dirige la requête vers un contrôleur, qui interroge un modèle et rend une vue.
Routage
# config/routes.rb
DemoApp::Application.routes.draw do
resources :users
end
Contrôleur
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def index; end
def show; end
def new; end
def create; end
def edit; end
def update; end
def destroy; end
end
Action index simplifiée :
class UsersController < ApplicationController
def index
@users = User.all
end
end
Modèle
# app/models/user.rb
class User < ActiveRecord::Base
end
Une fois @users renseigné, le contrôleur appelle la vue. Les variables d'instance (préfixées @) sont automatiquement accessibles dans la vue.
Vue
<!-- app/views/users/index.html.erb -->
<h1>Liste des utilisateurs</h1>
<table>
<tr><th>Nom</th><th>Email</th><th></th><th></th><th></th></tr>
<% @users.each do |user| %>
<tr>
<td><%= user.nom %></td>
<td><%= user.email %></td>
<td><%= link_to 'Montrer', user %></td>
<td><%= link_to 'Modifier', edit_user_path(user) %></td>
<td><%= link_to 'Détruire', user, :confirm => 'Êtes-vous certain ?', :method => :delete %></td>
</tr>
<% end %>
</table>
<%= link_to 'New User', new_user_path %>
À ce stade il manque encore : validation des données, authentification, tests et mise en page.
Exemple : micro-messages
rails generate scaffold Micropost content:string user_id:integer
rake db:migrate
Premières validations :
# app/models/micropost.rb
class Micropost < ActiveRecord::Base
validates :content, :length => { :maximum => 140 }
end
Associations (un utilisateur possède plusieurs micro-messages) :
# app/models/user.rb
class User < ActiveRecord::Base
has_many :microposts
end
# app/models/micropost.rb
class Micropost < ActiveRecord::Base
belongs_to :user
validates :content, :length => { :maximum => 140 }
end
Vérification en console :
rails console
first_user = User.first
first_user.microposts
exit
Voir aussi
- Rails, Rake
- Helper (Rails), Mise en page (Rails)
- REST (Rails) — modélisation des ressources