2011-01-26 3 views
1

私はプロダクトコンフィギュレータを設計中です。問題は、文字通り、すべての製品に複数のコンポーネントがあり、相互にやりとりする方法がかなりランダムであるように見えました。したがって、ある部分の量を変更した場合は、自動的に調整する必要があります。Jsがやっていることを追跡しているレール

これらの規則とこれらの規則が頻繁に変更されるという事実のため、私はそれらをJs関数にすることに決めました。 (ここではフィールド名ランダムである)

<% @counter = 0 %> 
<% @people.each do |p| %> 
<% @counter += 1 %> 
<tr> 
<%= form_for(:p, :remote => true) do |f| %> 
<th><%= f.label(p.name) %></th> 
<th><%= f.label(p.country.name) %></th> 
<th><%= f.label(p.state.name) %></th> 
<th id="<%= "money_" + @counter.to_s %>"> <%= f.select(:money, 1..10, :selected => p.money)%></th> 
<th id="<%= "comment_" + @counter.to_s %>"><%=p.money_comment%></th> 
<% end %> 
<% end %> 

と私はこのように、ロードされるファイル内のJs機能を持っている:私はこれらのようなレールのものを持って

function change_people() { 
    money1 = $('money_1').children[0].value; 
    $('comment_2').update((money1 == 5) ? "selected 5!" : 'why not 5?'); 
} 

document.observe('dom:loaded', function() { 
    change_people(); 
    $('money_1').children[0].observe('change', change_people); 
}); 

これはうまくいくので、ユーザーが選択したものに応じて値を変更することができましたが、ここに質問があります。レールはこれについてどのように知っていますか? RailsはDBからの値などのデフォルトの人数を持ってきましたが、カートに追加したい場合はどうすれば新しい値が得られるでしょうか?

ありがとうございます!

答えて

0

変更するたびにフォームの値を送信することをお勧めします。あなたはjQueryのを使用している場合たとえば、あなたはこのような何か行うことができます:

 
$('.money').change(function(){ $(this).closest('form').submit(); }); 

このコードは、いつでもクラスのお金 "と入力が調整されていることを述べているが、単にあることを起こるどの(最も近いフォームを送信あなたが定義したリモートフォーム)。

追加のヒントとして、あなたはあなたのコード例ではそうであるように、明示的な変数とカウンタを追跡する必要はありません、あなたはまたeach_with_index使用することができます:あなたの応答パン用

 
@people.each_with_index do |p, counter| 
    ... 
end 
+0

感謝を。私はまだDBにさまざまな範囲とオプションを適切に格納する方法を見つけ出していない。デフォルト値は問題ありません。しかし、どのように私は明らかにこれらのルールを与える必要があると思いますかDB内のすべての可能なフォームを格納することはあまりにも多くです。ちょっとした背景を与えるために、UIはExcelで、 "ルール"は文字列としてdbに保存されます。ユーザーが製品を選択すると、これらの文字列(数式に優れている)がもたらされるため、何らかの要素が変化したときに特定の要素が動的になります。 – Lievcin

+0

私は、これらの数式を調整できる頻度に依存すると思います。もしそれらが非常に静的であれば、それらを直接javascriptにコード化し、コードベースでそれを維持することができます。頻繁に変更された場合は、DBに保存し、管理用の管理インタフェースを使用できます。ページのロード時に、DBに対してクエリをクエリしてクライアントに渡すことができます。また、関連するルールをRailsからJavascriptにロードするように製品が選択されたときに、AJAX呼び出しを行うこともできます。 –

+0

ルールは頻繁に変更されるだけでなく、独自のルールで新製品が導入されます。 「頻繁に変更された場合は、DBに格納して管理するための管理インターフェースがある」と言うとき、jsコードまたはルビコードとして保存することを意味しますか? – Lievcin

関連する問題