モデルの空のインスタンスを作成するためのポイントは、あなたの新しいビューは、あなたの編集ビューでビューのコードの多くを共有するという考えに基づいていて、これで動作するようにモデルを必要としています。
たとえば、多くの場合、新しいページと編集ページはほぼ同じです。あなたの記事の新しいページは、ユーザーが名前、著者、および出版日を入力できるようにすることができます。これで、ユーザーはこの情報を編集したいと思うかもしれません。名前、著者、出版日を編集するための3つのテキストフィールドを正確に表示するでしょう。
これをやり直すには(自分自身を繰り返してはいけません)、そのフォームを1つのビューの一部分にまとめることができます。あなたはこのような景色で終わるでしょう:
# new.html.haml
New Article
= render :partial => "form"
# edit.html.haml
Edit Article
= render :partial => "form"
# _form.html.haml
= text_field_tag "title", @article.title
= text_field_tag "author", @article.author
= text_field_tag "publishing_date", @article.publishing_date
を明らかに既存の記事を編集しているとき、あなたは、データベースからそのデータをフェッチし、フォームに記入し、そのプロパティを使用する必要があります。多くの人が行うことは新しいページでそのフォームを再利用することですが、フォームには@article
という変数があると予想されますので、プログラマはnew
アクションで空のページを初期化します。
これは、フォームの一部にオブジェクトの呼び出しメソッドが必要な場合にも役立ちます。たとえば:
# article.rb
def published_today?
return (self.publishing_date.to_date == Date.today)
end
# _form.html.haml
- if @article.published_today?
%strong New!
しかし、あなたの新しいページと編集ページが同じコードを共有していない、とあなたの新しいページが作成された空のモデルインスタンスを必要としない場合、それは大丈夫だ、気にしないでください。
"インスタンス変数を初期化する必要があります"とどういう意味ですか? – Fredius
不要な場合は削除してください。どうすればそれが必要かどうかを確認できますか? 'articles'フォルダの' new.html.erb'テンプレートに移動し、そこにあることを確認してください。 'new.html.erb'テンプレートで' Article'の新しいインスタンスを初期化している可能性があります。これは、その変数を必要としない理由の1つです。 – fanta
フォームヘルパーを使用したい場合は、それを必要とするか、そうでなければ初期化をスキップすることができます –