2017-01-10 5 views
-1

短編小説変数を渡すために埋め込まれたRubyでJavaScriptを使用:パラメータとして

を私が埋め込まれたRubyのメソッドのパラメータとしてのJavaScript(具体的には、jQueryの)から変数を渡すようにしようとしています。

長い物語:

これは、すべての機能を開始します。要約すると、jQuery UIを使用して作成された日付ピッカーがあります。

#my_budget.html.erb 
<h1 class="text-center">Your Budget</h1> 
<h4 class="text-center">Select Month to View</h4> 
<input style="width:200px" name="startDate" id="startDate" class="date-picker form-control" placeholder="Select Month"/> 

<br> 
<br> 

<script type="text/javascript"> 
    function setDateRange() { 
    $('.date-picker').change(function() { 
    var date = $(this).val(); 
    return date 
    }); 
    } 

    $(document).ready(setDateRange); 
</script> 

私はこの変数(日付)を呼び出すためにrubyを埋め込みました。この値はMM/YYYY形式で渡されます。

#my_budget.html.erb 
<td class="section-value"><%= number_to_currency(@user.total_income(date)) %></td> 

ここに私のモデルがあります。

#user.rb 
# General Income 
    def total_income(current_month) 
    total_value = Transaction.joins(:user).where("transactions.sub_category" => '11').where("created_at = ?", current_month).sum(:amount) 
    total_value 
    end 

かなりの理由から、これは機能しません。

私はRubyのジュニア開発者であり、RubyとJSを特定の機能のために使用する時期はまだ学んでいます。

私のJS変数を埋め込みRubyに渡す最善の方法は何ですか?別の方法として、Rubyを介して入力値を "変更時"に呼び出す方法はありますか?そのため、日付選択ツールでユーザーが「March 2017 March」を選択するとRubyは「ねえ、変わった!それに応じて値を調整します。

ありがとうございました!

+0

HTTPのレッスンのための楽しい時間のように聞こえます。基本的な知識は、このような状況から抜け出すのに役立ちます。 – coreyward

+0

http://stackoverflow.com/questions/32724881/is-there-a-way-to-pass-javascript-variable-into-ruby-method-in-html-erb – gwalshington

+0

Rubyが実行されないことを理解する必要がありますブラウザに表示されます。したがって、サーバーにHTTPリクエストを送信しなくても、Rubyは 'change'イベントを知ることができません。クライアントから見れば、ERBはありません。彼らはHTML/CSS/Javascriptなどしか見ません。 –

答えて

1

簡単に言えば、Rubyはあなたのサーバー上で動作し、すべてのerbタグはクライアントに到達するまでに評価されます。例:

<%= number_to_currency(@user.total_income(date)) %> 

あなたは、あなたがそれを変更しようとするjavascriptの時間であるため失敗しますJavaScriptで「日付」を変更しようとすると、レールとサーバーが既に方法を評価し、それがその値ではありませんRubyのメソッドを返します。 。

さて、あなたはここで2つの単純なオプションがあります。

  1. は、あなたのRubyのコードを実行すると仮定されているものと同じ処理を行いJavaScript関数を書きます。
  2. サーバにAjaxコールを送信しました.Railsがリクエストを処理し、jsonまたはjavascriptでクライアントに応答させます。

最初のオプションはおそらくより簡単で、余分なリクエストを処理する必要がないため、サーバーにとってはより良い方法です。

2番目のオプションでは、フォームを作成してremote: trueに設定する必要があります。そして、あなたはjavascriptのファイルを作成する必要があります

@user_income = @user.total_income(params[:date) 
respond_to do |format| 
    format.html 
    format.js 
end 

を:あなたのコントローラでは、フォームのコンテンツを受信する必要があります、あなたの@ user.total_incomeメソッドを呼び出すと、それはJSONまたはJavaScriptを返すようにrespond_toを設定あなたのビューのフォルダといくつかのjavascriptを書くことができます。

$('#where-to-put-your-income').append('<%= j render @user_income %>'); 

あなたがここにRubyとJavascriptを使用する方法について読むことができます:単純化し、それはこのようなものになります

http://guides.rubyonrails.org/working_with_javascript_in_rails.html http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to

幸運を、私はまだまた、ジュニアRailsのです開発者、最善を尽くしましょう。

+0

それを愛する!正しい軌道に乗せてくれるありがとう! – jcxswc

+0

あなたは大歓迎です –

関連する問題