0

したがって、Rails アプリでは、データベース、ハード ドライブにテーブルがあり、ハード ドライブごとにさまざまな数のヘッドとプラッターがあります。ハード ドライブを作成または編集するときに、a) 必要な数のヘッド ステータス フォームとプラッター ステータス フォームを動的に表示するか、b) 適切な数のヘッド ステータス フォームとステータス フォームが連続して表示されるページにユーザーを誘導したいページ。私はオプションaを好みますが、それを機能させるには、カスタムJavaScriptまたは何かが必要になると思います(プラグインがない限り、実際には実行できません。JavaScriptはわかりません)。本当に、プラッターとヘッドのステータスが入力されていないハード ドライブを拒否したいと思います。

(変数名はもちろんhard_drive、platter_status、head_status)

たとえば、ラップトップ ドライブがある場合、ドライブを作成するときにヘッドとプラッターが 1 つあると定義します。ヘッド & プラッター カウントのコンボボックスの値が変更された場合、プラッター & ヘッド ステータスのフォームを表示します。作成ボタンが押されると、データを使用してデータベースに hard_drive が作成され、必要に応じて platter_status および head_status 項目がそれぞれ作成されます。

どうすればいいですか?ビューで、コンボ ボックスの変更を検出し、コンボ ボックスの値を使用してレイアウトを表示するものを追加する必要があることはわかっています。

これと性質が似ている


編集1: だから、私はこれを持っていますが、これまでのところ機能していませんが、正しい考えがあります. javascript を使用して動的に html を追加することについて話しているスレッドをいくつか見つけました。

  <div class="field" id="head_count" >
    <label for="hard_drive_head_count">Head count</label><br />
    <input id="hard_drive_head_count" name="hard_drive[head_count]" type="number" value="0" />
    <script type="text/javascript">
      var input = document.getElementById('hard_drive_head_count'),
        events = [
        "input",
         ];
      events.map(function(ev) {
      input.addEventListener(ev, function() {
        console.log(ev + ' => ' + input.value);
    if (parseInt(input.value) === 1) {
      document.getElementById('platter_statuses').innerHTML= "howdy";
    } else {
      document.getElementById('platter_statuses').innerHTML="";
    }
      }, false);
      });
    </script>
  </div>
  <label for="platter_status">Platter status</label><br />
  <div class="field" id="platter_statuses" >

  </div>

しかし、これを手に入れたので、問題は次のようになります- platter_status ビューの _form.html.erb からのフォームを使用して、データベースからすべて入力したものをすばやく入力するにはどうすればよいですか? 動的ルビーを使用して別の方法で考えましたが、引数(プラッター番号とドライブID)を渡す方法が正確にわかりません。これにより、データベースに何を入力するかがわかり、わかりませんplatter_status ビューに解決されるように <%= @SOMETHING_HERE %> の @ の後に何を置くか...

4

1 に答える 1

0

実際に、私が必要としているものに最適なヘルパーがあることを発見しました. モデル内の accept_nested_attributes_for 関数です。これをレールキャスト 196 と 197 と組み合わせることで、私が望んでいたものを正確に達成することができました。

hard_drive モデルでは、次のものが必要です。

attr_accessible :head_statuses_attributes
has_many :head_statuses, :dependent => :destroy
accepts_nested_attributes_for :head_statuses, :allow_destroy => true

head_status および platter_status モデル用。

ビューでは、次のような行が必要になります。

<%= link_to_add_fields "add head status", f, :head_status %>

タグの外側の部分には、次のものが必要です。

 <%= link_to_remove_fields "Remove", f %> 

詳細については、次の記事を参照してください: accept_nested_attributes_for の仕組み

ダイナミック編集ができる まで ダイナミック編集ができるまで その2

于 2012-07-08T16:41:15.597 に答える