一部の熟練プログラマは、only nesting resources 1 level deepを推奨しています。確かにあなたのドメインはもっと複雑になりますが、その複雑さをすべて単一のビューに公開するべきではありません。サイト全体を1ページで管理するには、実際ににが必要な場合は、1つのフォームで複数のフォームを使用し、AJAX経由でさまざまなディスプレイを更新することをおすすめします。より使いやすく、より洗練されたコードが得られます。 EDITED
さて、ここHAMLのサンプルビューです:
%h1 Editing Site
#site-form
- form_for @site, :class => 'remote', :'data-update' => '#site-form' do |f|
%p
= f.label :name
= f.text_field :name
%p
[All the other fields on your Site model]
%p
= f.submit "Save Site"
%h2
Buildings for
= @site.name
#buildings-forms
- for building in @site.buildings
%div{ :id => "building-#{building.id}" }
- form_for building, :class => 'remote', :'data-update' => "#building-#{building.id}" do |f|
%p
= f.label :name
= f.text_field :name
%p
[All other building fields]
%p
= f.submit "Save Building"
%h3
Controllers for
= building.name
- for cntroller in building.controllers
%div{ :id => "controller-#{cntroller.id}"}
- form_for cntroller, :class => 'remote', :'data-update' => "#controller-#{cntroller.id}" do |f|
%p
= f.label :name
= f.text_field :name
%p
[All other controller fields]
%p
= f.submit "Save Controller"
、次のレベルは、測定値は、ほとんど同じになります。
は限りロッキングAJAXの取得など、jQueryの中であなたが言う:
$(function() {
$('form.remote').submit(function() {
var submitted_form = this;
$.post(this.action, $.serialize(this), function(data_returned, status, request) {
var updated_block = $(data_returned).find($(submitted_form).attr('data-update').html();
$($(submitted_form).attr('data-update')).html(updated_block);
});
return false;
});
});
これは、各フォームを投稿することができますし、ポストが発生した後にサーバーから新しいバージョンでその更新可能なブロックを更新します。あなたは好きになり、メタブロックプラグインを使用して、ブロックを更新する必要がある情報やリクエストに関する情報を保存できますが、これは簡単でhtmlの設定を見ることができます。 data-x属性はHTML5のスケジュールされた機能ですが、今後も使用することができます。
リモートフォーム用のコンベンションを作成することで、少量のコードでjQueryがすべてのAjax投稿を簡単に処理できるようになります。あなたは、おそらくいくつかの面白いもの、スピナー、バリデーションなどが必要です。そのための余地がありますが、これはあなたが単一のページインターフェイスで始めることができます。
これは*私がやっていることです。私はAJAXを制御しているAJAXを制御しているAJAXのコンセプトの周りに頭を抱えているだけで問題はありません。私はすべての "フォーム"は独立しているだろうと思うが、(この特定のプロジェクトには「必要」ではあるが)少しモノリシックなようだ。 さらに重要なのは、私は質の高いビュー管理と部分的な作成を理解する必要があります。私は終わりから始まり、帰り道に行くと思います。実装上の考えがあれば、私はすべて耳にします。ありがとう。 –
優秀!私はそれを与えるだろう。とても有難い。質問:「コントローラ」は予約語ですか?私はどこでもそれを見つけることができません。 –
ビューでは、 "controller"はActionView :: Baseの属性で、現在の要求のControllerを参照します。コントローラは予約語ではないかもしれませんが、Railsの命名規則の一環として頻繁に使用されています。これは、依存関係がどのようにロードされ、キャッシュされるかに影響します。適切な選択肢のためにシソーラスに相談することをお勧めします。 – austinfromboston