2009-06-05 6 views
11

je suis nouveau à ruby ​​sur rails et je travaille avec la version 2.3 sur mac osx. J'essaie de créer la même fonctionnalité qu'un échafaudage crée, mais tout seul. J'ai créé un contrôleur, une vue et un modèle "post". dans le contrôleur de poste, i ont les suivantes:instance variable vs symbole en ruby ​​sur rails (form_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

dans new.html.erb, i ont les suivantes:

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

i a remarqué que, dans l'échafaudage de code généré, l'utilisation de la variable d'instance @post pour l'assistant form_for. pourquoi utilisent-ils la variable d'instance dans le formulaire généré par l'échafaudage en passant le symbole: post dans form_for fait exactement la même chose, alors qu'un symbole nécessite de changer la config des routes?

merci beaucoup, Yuval

Répondre

15

si vous utilisez le symbole: afficher crée

<form action="/posts" method="post"> 

si vous utilisez l'instance @post

pour @post = Post.new vous obtiendrez

<form action="/posts/create" class="new_account" id="new_account" method="post"> 

pour @post = Post.find (1) vous obtiendrez

<form action="/posts/update" class="edit_account" id="edit_account_1" method="post"> 
<input name="_method" type="hidden" value="put"> 

si vous avez des formes différentes pour votre nouveau et votre édition pas grand-chose mais plus encore que votre nouveau et vos formes d'édition vont être identiques ou proches

donc si vous utilisez la variable d'instance @post vous pouvez mettez tout le code du formulaire dans _form et appelez simplement le partiel et il gérera le reste basé sur si vous passez un nouvel enregistrement ou un enregistrement existant

+0

merci beaucoup. ce qui le rend clair :) –

+3

l'importance de cette _method cachée est que les navigateurs ne supportent pas les méthodes put et delete, donc vous devez laisser l'application savoir quand une méthode post est censé être un put ou un delete, heureusement rails magiquement poignées ceci pour nous – ErsatzRyan

+0

Vous devez utiliser @post sur le nouveau formulaire, et vous en avez besoin même si vos formulaires sont séparés. Sinon, lorsque vous créez un nouveau message avec des données non valides et qu'il retourne au nouveau formulaire avec des erreurs de validation, il ne remplira pas les informations que vous avez entrées. –

0

Une raison possible est que cela rend le code pour la forme pour créer un nouveau poste plus similaire au code pour un formulaire pour mettre à jour un poste existant.

+0

merci pour votre réponse –

Questions connexes