2009-06-05 14 views
11

私はRuby on Railsには新しく、Mac OS Xではバージョン2.3で作業しています。 足場が作成するのと同じ機能を作成しようとしていますが、自分で作成しています。 "投稿"コントローラ、ビュー、モデルを作成しました。ポストコントローラで 、iは下記た:new.html.erbでインスタンス変数とルビーのシンボル(form_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

、iは下記た:

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

iは、足場にインスタンス変数、使用するコードを生成したことに気づいform_forヘルパーの@post。なぜシンボルを渡す場合、スカフォールド生成されたフォームでインスタンス変数を使用するのですか?form_forのpostは全く同じことを行いますが、シンボルはルートの設定を変更する必要がありますか?

はのYuval

答えて

15

あなたはシンボルを使用する場合:あなたは@postため

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

を取得します@post = Post.newため

@postインスタンスを使用する場合、それは

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

を作成し投稿= Post.find(1)を取得します

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

あなたの新しいフォームに新しいものがあり、それほど大したことはありませんが、あなたの新しい編集フォームよりも似ていない場合は、

です。インスタンス変数@postを使用すると、すべてのフォームコードを_formに入れて、部分的に呼び出して、新しいレコードまたは既存のレコードを渡す場合は、残りの部分を処理します。

+0

ありがとう、ありがとう。それは明らかになります:) –

+3

その隠された_メソッドの重要性は、ブラウザーがputメソッドとdeleteメソッドをサポートしていないので、ポストメソッドがputまたはdeleteであることをアプリケーションに知らせなければならないということです。これは私たちのため – ErsatzRyan

+0

新しいフォームで@postを使う必要があり、フォームが別々の場合でも必要になります。それ以外の場合、無効なデータを含む新しい投稿を作成し、検証エラーが発生した新しいフォームに戻ると、入力した情報が入力されません。 –

0

一つの可能​​性のある理由は、それが既存のポストを更新するためのフォームのコードに類似新しい投稿を作成するフォームのコードを作ることです、どうもありがとうございました。

+0

ありがとうございました –

関連する問題