私は Rails 3 ベータ版を使い始めており、通常のスターター プロジェクトを実行しようとしています。プロジェクトの単純なリストを作成しますが、アプリのナビゲーションには ajax リクエストを使用します。Rails 3 では、私の通常のコードは基本的な scaffold では機能しません。
ActionView:MissingTemplate (Missing template projects/new with {:format=>[:js]}
これが私のプロジェクトコントローラーからのスニピットです:
# GET /projects/new
# GET /projects/new.xml
def new
@project = Project.new
respond_to do |format|
format.html # new.html.erb
format.js { render :layout => false }
format.xml { render :xml => @project }
end
end
format.js の行に注目してください。私は JavaScript に Mootools ライブラリを使用していますが、Rails 3 が提供する新しい目立たないフックはまだ試していないため、まだ手で書いています。ページで「新規」リンクがクリックされたときに発生する JavaScript リクエストを次に示します。Mootools では、Request.HTML update 属性が、HTML にある div を ID 'main' で更新します。
a.addEvents({
'click': function(e) {
e.stop();
console.log("Click for '" + a.get('href') + "'");
new Request.HTML({
url: a.get('href'),
method: 'get',
update: 'main',
onRequest: function() {},
onSuccess: function() {},
onFailure: function(xhr) {},
onComplete: function() {}
}).send();
}
});
リンクがクリックされたときに何が起こっているのかというと、コントローラーは、私が持っていない new.js.erb ファイルを使用して js 呼び出しに応答しようとします。Rails の以前のバージョンでは、これは当てはまらず、new.html.erb で自動的に応答していました。コントローラーで format.js 行を削除すると、応答が返されますが、javascript を介して呼び出されたときに応答にレイアウトを持たせたくありません。
Rails 3 ベータ版で変更されたことはありますか?