2

そこにあるのと同じくらい多くの驚くべき情報は、しばしば私の痴呆の要件をわずかに満たしていないようです。そうは言っても、1つのページで複数のネストされたモデルを処理するメカニズムを探しています。

これで、2つのモデル(Railscastなど)のネストに関するすべてのビデオと投稿(実際にはそうではありませんが、ユーモアを交えています)を見てきました。ただし、ページをクリーンに保つためにJavascriptを使用している間は、4つの深さでネストされたモデルを処理する必要があります。

基本的に、[サイト]->[建物]->[コントローラー]->[測定]があり、単一のページで完全なサイトを管理(CRUD)したいと考えています。それは可能だと確信していますが、頭を包むことができる適度にきれいな方法はまだ見ていません。誰かが何か入力を持っているなら、私はすべての耳(または場合によっては目)です。

前もって感謝します。

4

3 に答える 3

3

一部の熟練したプログラマーは、1レベルの深さのリソースのみをネストすることを推奨しています。確かに、ドメインはより複雑になる可能性がありますが、その複雑さのすべてを1つのビューで公開するべきではありません。サイト全体を1つのページで管理する必要がある場合は、すべてを1つのフォームで行うのではなく、複数のフォームを使用してAJAXを介してさまざまな表示を更新することをお勧めします。使い勝手が良く、コードがすっきりします。

編集済み

さて、これが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"

そして、次のレベルであるMeasurementsは、ほとんど同じように見えます。

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投稿を簡単に処理させることができます。おそらく、より洗練されたもの、スピナー、検証などが必要になるでしょう。そのための余地はありますが、これにより、単一ページのインターフェースから始めることができます。

于 2009-06-10T03:59:27.447 に答える
1

http://activescaffold.com/ とStreamlinedを確認してください-http: //streamlinedframework.org/は、 どちらもページ上のネストされたモデルをサポートしています。

おそらく、ユーザー向けのトレーニングが必要になることに注意してください。4レベルのディープモデルは、人々が毎日遭遇するものではありません。

于 2009-06-10T03:53:47.430 に答える
0

最も簡単な方法は、親->子のペアに分解することだと思います。

  • サイト->建物
  • 建物->コントローラー
  • コントローラ->測定

次に、4つすべての間に単純な関係があります。

于 2009-06-10T03:52:52.487 に答える