@products = Product.all
コントローラの新しいメソッド内に変数が定義されています。これには、フォームの選択ボックスに表示されるデータベーステーブルの値が含まれています。
createメソッドで検証エラーが発生した場合、呼び出してrender :action => 'new'
います。
他のすべての変数は正常に戻っているように見えますが、@productsはnilとして戻ってきます
ここで何が欠けていますか。
@products = Product.all
コントローラの新しいメソッド内に変数が定義されています。これには、フォームの選択ボックスに表示されるデータベーステーブルの値が含まれています。
createメソッドで検証エラーが発生した場合、呼び出してrender :action => 'new'
います。
他のすべての変数は正常に戻っているように見えますが、@productsはnilとして戻ってきます
ここで何が欠けていますか。
render :action => new
アクションのビューをActionView
レンダリングするように求めています -- ご想像のとおり、現在のコントローラーでアクションを実行しません。new
new
http://guides.rubyonrails.org/layouts_and_rendering.html#using-renderから:
render
withの使用:action
は、Rails の初心者にとってしばしば混乱の元になります。指定されたアクションはレンダリングするビューを決定するために使用されますが、Rails はコントローラーでそのアクションのコードを実行しません。ビューで必要なインスタンス変数は、 を呼び出す前に現在のアクションで設定する必要がありますrender
。
の代わりにrender :action => :new
、 を使用できますredirect_to :action => :new
。これにより、すべてのインスタンス変数が正しく読み込まれnew
、アクション内のロジック全体をコピーする必要がなくなりますcreate
。
幸運を!
render :action => 'new'
ビューをレンダリングするだけで、コントローラーで新しいメソッドを呼び出しません。したがって、新しいメソッドでインスタンス化された変数は、呼び出す直前にインスタンス化する必要がありますrender :action => 'new'