1

私は Rails が初めてで、JavaScript 変数を Ruby 埋め込みコードに使用して、データベースでクエリを作成したいと考えています。

これは私のコードです

function modify(){
    var select = document.getElementById("special_id").value;
    var select2 = document.getElementById("target_area_id");
    select2.options.length = 1;

    <% @values = TargetArea.where(:special_id => select) %>

    select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");
}

select から取得した値をフィールドの ID と比較したい。

Rubyでこれを行う方法を教えてください。ありがとう

4

2 に答える 2

1

私が知っている中でおそらく最も簡単で、これを処理する従来の方法の 1 つは、Ajax 要求を実行することです。通常、JavaScript はクライアント側で、Ruby はサーバー側です。

ルート ファイルでルートを作成し、対応するコントローラーで、HTML ではなく JavaScript で応答するアクションを作成できます。その JavaScript ファイルでは、ページ上の内容を変更または修正したり、変更した変数にアクセスしたり、ページの一部を再レンダリングしたりできます。ここでは jQuery を使用します。これは少しクリーンだからです。

あなたのルートファイルで:

post 'some_controller/make_a_change', to: 'some_controller#make_a_change'

次に、上で定義した関数で次のようにします。

$.ajax({
   url:'/some_controller/make_a_change', //Defined in your routes file
   data:(
     'special_id=' + $('#special_id').val() + '&' +
     'target_area_id=' + $('#target_area_id').val()
   )
})

SomeController.rb では、次の方法で JavaScript の値にアクセスできますparams

def make_a_change
   some_special_id = params[:special_id]
   taid = params[:target_area_id]
   @values = TargetArea.where(:special_id => some_special_id)

   respond_to do |format|
      format.js { render 'make_a_change' } #make_a_change.js.erb
   end
end

その後、make_a_change.js.erb で残りを実行できると思います。これは、他の関数を呼び出して Ajax リクエストが成功するたびに実行されます。

var select2 = document.getElementById("target_area_id");
select2.options.length = 1;
select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");

必要に応じて微調整してください。お役に立てれば!


アップデート:

私はちょうどこの行に気づきました:

select2.options[select2.options.length] = new Option(<%= @values.count %>,"1");

動作しない場合があります。それが HTML 選択ボックスまたは類似のものである場合、それを独自のビューに配置し、make_a_change.js.erb の適切な場所に再レンダリングできます。

そのようです:

     $('#some_div').html('<%= j render 'select2_list', values:@values %>')

ほとんどの場合、私の答えの背後にあるテーマは次のとおりです。JavaScript 関数から Ruby コードまたはサーバー データとやり取りしたい場合、これはボタンをクリックするか、ボックスまたはそれらの行に沿って何かをチェックしたときに呼び出される関数です。 Ajax リクエストをサーバーに送信し、コントローラーでリクエストを処理します。=これにより、Rails に近づき、2 つの異なる言語変数を記号でリンクしようとすることからさらに遠ざかることができます。

于 2013-03-15T00:52:25.723 に答える
0

Rubyはphpやasp/asp.netのようなサーバーベースの言語であるため、ページ内のサーバーからのコードを印刷するのと同じように使用するのは非常に簡単です。したがって、サーバー側の値を使用してjavascript変数を変更する場合は簡単です。ただし、反対のことをするのは別のことです。プロキシ呼び出し(おそらくjQuery)を使用して、これらの値をサーバーに送信します。あなたが求めている解決策は、私が知っているレールではなく、jQueryのようなjavascriptフレームワークの使用を求めています。

jQuery ajaxプロキシを使用し、サーバーの応答に基づいてクライアントのデータを更新してみてください。これでうまくいきます。

http://www.jquery.comを確認し、railsを使用して、クエリにJSonで応答するサービスを作成します。

これがお役に立てば幸いです。

于 2013-03-15T00:14:33.627 に答える