• 20 hours
  • Medium

Free online content available in this course.

course.header.alt.is_certifying

Got it!

Last updated on 1/17/17

Consolidez vos contrôleurs avec strong parameters

Log in or subscribe for free to enjoy all this course has to offer!

Voici à quoi ressemble un formulaire tel que vous avez appris à les faire (j’ai retiré ici la gestion des erreurs qui ne servira pas) :

<%= form_for @book do %>
  <input type="text" name="title" value="<%= @book.title %>" />
  <input type="text" name="content" value="<%= @book.content %>" />
  <input type="submit" value="Ajouter le livre" />
<% end %>
def create
  @book = Book.new title: params[:title], content: params[:content]
  # ...
end

Généralement, il est préférable d’inclure le nom de la ressource dans le name  des champs du formulaire. Ce qui donne :

<%= form_for @book do %>
  <input type="text" name="book[title]" value="<%= @book.title %>" />
  <input type="text" name="book[content]" value="<%= @book.content %>" />
  <input type="submit" value="Ajouter le livre" />
<% end %>
def create
  @book = Book.new title: params[:book][:title], content: params[:book][:content]
  # ...
end

Cela permet par exemple de créer deux éléments d’un coup dans un formulaire sans risquer de les mélanger. Je ne vais pas vous détailler ce processus, l’objectif ici est simplement de vous montrer les bonnes pratiques dans la réalisation d’un formulaire.

Cette notation a le défaut d’être plus longue. Et c’est particulièrement agaçant de répéter la même chose dans le create et dans l’update. Pour régler cela, il suffit d’extraire le paramètre du create dans une fonction :

def create
  @book = Book.new book_params
  # ...
end

# ...

private

def book_params
  { title: params[:book][:title], content: params[:book][:content] }
end

Ruby on Rails propose un outil appelé strong parameters. Il permet d’utiliser une syntaxe plus élégante pour ce book_params :

def book_params
  params.require(:book).permit(:title, :content)
end

Cette syntaxe a plusieurs avantages par rapport à l’autre, en particulier d'être plus courte !

Observez le contrôleur généré par le scaffold : c’est ainsi qu’il fonctionne pour la gestion des formulaires. Quand vous ajoutez un attribut à un modèle, pensez bien à l’ajouter (si nécessaire) à la liste des attributs autorisés dans la fonction books_params.

Dans le formulaire généré par le scaffold, vous découvrirez de nouveaux helpers pour faire des inputs automatiquement. Utilisez la notation que vous préférez, avec ou sans helpers.

Example of certificate of achievement
Example of certificate of achievement