Retour à Rails après un interlude Ruby/Twitter.
En fait, il y a 2 étapes pour créer un nouveau post :
- Il faut d’abord appeler la méthode new qui crée un objet Post
- puis il faut appeler la méthode create qui va récupérer les infos du formulaire et sauvegarder l’objet dans la base de données.
New post
En allant sur http://localhost:3000/posts/new, je crée un objet Post (vide pour l’instant). La méthode new est dans mon Controller :
def new @post = Post.new respond_to do |format| format.html # new.html.erb format.xml { render :xml => @post } end end
Cette méthode est appelée en allant sur mon View qui se trouve dans app/view/posts/new.html.erb :
<h1>New post</h1>
<% form_for(@post) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :content %><br />
<%= f.text_area :content %>
</p>
<p>
<%= f.submit 'Create' %>
</p>
<% end %>
<%= link_to 'Back', posts_path %>Un fichier de template erb qui me crée un formulaire pour mon objet avec les différents inputs de texte correspondants chacun à un attribut de mon objet.
Pour l’instant, en remplissant le champ, je prépare mon objet à appeler la méthode create. Cette méthode est appelée quand je cliquerai sur le bouton de submission.
Create post
Je clique sur le bouton “Create”, et là j’appelle la méthode create.
def create @post = Post.new(params[:post]) respond_to do |format| if @post.save flash[:notice] = 'Post was successfully created.' format.html { redirect_to(@post) } format.xml { render :xml => @post, :status => :created, :location => @post } else format.html { render :action => "new" } format.xml { render :xml => @post.errors, :status => :unprocessable_entity } end end end
Si la sauvegarde se passe bien, j’ai une notification “‘Post was successfully created.” et je suis redirigé vers l’affichage du post en question.
Sinon, je reste sur la page “new” et j’ai l’affichage des erreurs.
Flux RSS
[...] comme pour la création d’un post, c’est à dire que je passe par deux méthodes. Au lieu d’avoir new puis create, [...]