0

必要なもの-フォームに入力された番号を取得して、更新前の以前のレコードと照合して、検証エラーが発生した場合にフォームを送信する前に確認するように求める方法が必要です。パラメータは機能しますが、フォームが投稿された後にのみ返されるため、助けにはなりません。ruby 変数に渡すことができる ajax 呼び出しはありますか? それとも、送信やリンクを行わずにテキスト ボックスの入力を読み取るある種の Ruby コードでしょうか?

私がやっていること-検証で保存を「防止」したくないので、「手動検証」を設定しようとしています。代わりに、それは確認のようなものであるべきです。

コンテキストが気になる場合は、概要を以下に示します。毎月の預金を支払うクライアントがいます。これらのデポジットは、第三者を通じて電話で確認します。当然のことながら、可能な限り正確なデータを取得するには、人的エラーやその他の要因を考慮する必要があります。今月のデポジットが先月のデポジットよりも少なくなることはありませんが、デポジットはある口座から別の口座に「移動」される可能性があり、その場合、それが少ないように見えます。新しいデータが入力されるフォームがあり、以前の記録と照合して、預金が以前に報告されたものよりも多いか少ないかを確認したいと考えています。それより少ない場合は、「よろしいですか?」という確認を求める必要があります。ものの種類。

コードは古くて時代遅れです。根本から変更する必要がありますが、これを行うのに数日かかると数か月かかります。パッチを探しているだけです。

これまでのところ、cur_deposit は今月、rec_deposit は先月であることに注意してください。

<%
arr1 = []
arr2 = []
is_less = false

r = @recent_inquiries.last
r.inquiry_deposits.order(:id).each do |t|
  arr1 << t.cur_deposit.to_f
  arr1 << t.rec_deposit.to_f
end
@inquiry.inquiry_deposits.order(:id).each do |td|
    #============THIS is the part that needs help
    arr2 << params["cur_deposit_text_box"]
    arr2 << params["rec_deposit_text_box"]
end
i = 0
while i < (arr1.size - 1)
  comp_arr1 = []
  comp_arr2 = []
  comp_arr1 << arr1[i]
  comp_arr1 << arr1[i + 1]
  comp_arr2 << arr2[i]
  comp_arr2 << arr2[i + 1]
  if Inquiry.compare_deposits(comp_arr1, comp_arr2) != nil then is_less = true end
  i = i + 2
end

if is_less
  strConf = "A deposit from last month is greater than the same deposit this month, which should not happen.  Are you sure?"
end
%>
<%= submit_tag "Save Inquiry", :onclick=>"$('#submit_form').val('Save Inquiry summary');", :class => 'tgButton3', :id => 'save_inquiry_button_bottom', :confirm => strConf %>

このコードが機能するようになったら、機能するすべてのコードをモデルに隠します。テスト用にビューに表示するだけです。このスクリプトが呼び出すすべての「カスタム メソッド」が機能していると想定しても問題ありません。それらのコードが必要な場合は、喜んで共有します。

Rails バージョン 3.0.20

4

2 に答える 2

0

Web サイトで jQuery を使用できますか? (そうでない場合は、プレーンなJavaScriptで実行できます)

$('#id-of-your-field').change(function(e){
 //do here your client side logic if any needed
 var yourfirstvalue = $(e.target).val();
 //now take the value and send it to server (your ruby stuff)
 $.ajax({
   url: yourURL + "/" + yourfirstvalue,
   success: function(data){
      //this data can be sent as JSON in structure which suits the best to you
      //so you can use it to populate your second dropdown
      var values = JSON.parse(data);
      //use your values
   }
 });
});

Googleの「コンボボックスの例」が役立つかもしれません。

于 2013-09-27T16:16:12.047 に答える
0

この質問を締めくくるために、そして他の誰かが不思議に思っている場合に備えて、私は自分の質問に答えます. これが私が見つけたものです。

クライアントとサーバーの関係の性質上、テキスト入力の値を取得し、それを ruby​​ 変数に格納し、それを別の ruby​​ 変数と照合する方法は実際にはありません。Ruby スクリプトは 1 回だけ実行されてからレンダリングされるため、ajax はバックグラウンドで継続的に実行され、入力などを収集できる可能性がありますが、クライアント側のみの対話について話す場合、Ruby との統合は不十分です。(間違っていたら訂正してください。結局のところ、質問を投稿してみんなの意見を聞きました!)

修正: 非表示のタグを使用してスイッチを作成しました。フォームが読み込まれると、隠しタグは空白になります。フォームを送信した後、更新アクションは、新しく入力されたデータのパラメーターを先月の数値と比較してチェックします。条件が満たされていれば、保存されます。そうでない場合は、メッセージを含むページを再読み込みします。メッセージが確認されると、ajax コマンドは非表示のタグを「true」に変更します。これにより、更新アクションが再度実行されると比較がバイパスされます。そうしないと、データは保存されません。問題が解決しました!

誰かが 2 セントを追加したい場合に備えて、これをコミュニティ wiki の回答にしています。

于 2013-10-02T16:26:03.727 に答える