2009-06-05 7 views
11

Ich bin neu auf Ruby on Rails und arbeite mit Version 2.3 auf Mac OSX. Ich versuche, die gleiche Funktionalität zu schaffen, die ein Gerüst schafft, aber allein. Ich habe eine "Post" -Controller, Ansicht und Modell erstellt. in post-Controller, ich habe die folgenden:Instanzvariable vs. Symbol in Ruby on Rails (form_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

in new.html.erb, ich habe die folgenden: variable

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

ich bemerkt, dass Code in dem Gerüst erzeugt wird, die Verwendung der Instanz @post für das Formular_für Helper. Warum benutzen sie die Instanzvariable in der scaffold-generierten Form, wenn sie das Symbol übergeben: post in form_for macht genau dasselbe, während ein Symbol die Konfiguration der Routen ändern muss?

vielen Dank, yuval

Antwort

15

wenn Sie Symbol verwenden: per Post

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

erstellt, wenn Sie die Instanz @post

für @post = Post.new verwenden, werden Sie

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

für @post bekommen = Post.find (1) erhalten Sie

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

Wenn Sie verschiedene Formen für Ihre neue und Ihre Bearbeitung haben keine große Sache, aber likey als nicht Ihre neue und Ihre Bearbeitungsformulare werden identisch oder in der Nähe sein

also wenn Sie die Instanzvariable @post Sie können Setzen Sie den gesamten Formularcode in _form und rufen Sie nur die teilweise und es wird den Rest basierend auf, wenn Sie einen neuen Datensatz oder einen bestehenden Datensatz übergeben

+0

vielen Dank. das macht es klar :) –

+3

Die Bedeutung dieser versteckten Methode ist, dass Browser keine Put- und Delete-Methoden unterstützen, so dass Sie die Anwendung wissen lassen müssen, wenn eine Post-Methode ein Put oder ein Delete sein soll, glücklicherweise rails magisch handhabt dies für uns – ErsatzRyan

+0

Sie müssen @post auf dem neuen Formular verwenden, und Sie benötigen es, auch wenn Ihre Formulare getrennt sind. Andernfalls, wenn Sie einen neuen Post mit ungültigen Daten erstellen und dieser mit Validierungsfehlern zum neuen Formular zurückkehrt, werden die von Ihnen eingegebenen Informationen nicht ausgefüllt. –

0

Ein möglicher Grund ist, dass es den Code für das Formular für eine Form einen neuen Beitrag mehr ähnlich den Code erstellen macht einen bestehenden Eintrag zu aktualisieren.

+0

Vielen Dank für Ihre Antwort –