0

Rails アプリケーションで簡単な AJAX を使用したいと考えています。私が抱えている主な問題は、スクリプト内でリクエストが送信される URL を指定する必要があることです。ほとんどの場合、これは Rails コントローラー アクションへのパスです。それ以外の場所では、手動で明示的にパスを記述しないように (つまり、 のような醜いことをしないでください'/my_resources/' + resource_id)、代わりに のようなヘルパーを使用することをお勧めしmy_resource_pathます。

しかし、これらのヘルパーは 内では機能しないため、このアプローチは JavaScript ではうまく機能しませんassets/javascripts。問題を回避できるいくつかの醜い方法を考えることができます。現在、基本的に次のようなものをビュー内に配置する非常に醜い回避策を実装しています。

<%= javascript_tag "onSubmitQuotePage('#{j escape_javascript(autocomplete_authors_url(''))}');"%>

しかし、Rails の開発者が、より優れたソリューション、つまり AJAX を行う正しい方法を考えていなかったとは思えません。

4

2 に答える 2

2

私はこれを行う方法が好きだとは言えませんので、これを行うより良い方法を聞いてとてもうれしく思います.

ただし、関連する DOM 要素のデータ属性にパスを含めるか、一部の静的ルートについては、<script>関連するパスを含むレイアウト ファイルにブロックを含めます。

<script>
(function() {
"use strict";
window.myapp || {};
window.myapp.new_order_path = '<%= new_order_path %>';
window.myapp.orders_path = '<%= orders_path %>';
...
}());
</script>

決してきれいな解決策ではありませんが、JS でルートが必要になるケースはかなりまれであり、myapp.new_order_path必要なときに JS で使用できます。

于 2012-12-04T11:01:52.080 に答える
1

ここで 2 セント追加します。Rails URI ヘルパーを使用して、ある種の URI テンプレートを生成できます。たとえば、このルートが定義されている場合:

edit_user GET /users/:id/edit(.:format) users#edit

のようedit_user_path(':user_id:')に呼び出すと、 が返され/users/:user_id:/editます。このようにして、JavaScript によってコンパイルされる URI テンプレートを生成できます。@Tigraineが言ったように、これをいくつかの最上位要素のデータ属性に含めて、クライアント側から使用できます。

これは、AJAX フェッチ リソースの URI を生成する必要がある状況で実際に発生します。リソース ID を提供し、javascript に単純な .xml を使用してテンプレートから URI をコンパイルさせるだけですstring.replace(':user_id:', user_id)

于 2015-04-15T07:14:33.163 に答える