2

1つのRails(3.2.6)アプリにujsを正常に追加しました。フォームタグに:remote => trueを追加すると、js.erbファイルにajax呼び出しを行って、divなどを動的にロードできます。

しかし、同じマシン上の別のアプリケーション(Ubuntu 12.0.4)では、ujsエンジンが機能していないようです。フォームがjsではなくformat=>htmlを送信しているため、常にテンプレートが見つかりません。フォームにjs形式(format =>'js')を使用させると、ajaxを介して呼び出すのではなく、js.erbファイルをレンダリングするだけです。

application.jsには、次の適切なヘッダーが含まれています。

//= require jquery
//= require jquery_ujs
//= require_tree .

上記のjavascirpt参照を含む、アプリケーションレイアウトを使用しているプラ​​イマリホームページを実際に参照すると、javascriptファイルが含まれます。ページのフォームは次のとおりです。

<%= form_tag list_path, :remote => true, :id => 'frmBookResults', :method => :post do %>

ただし、:remote => trueが含まれ、list_path用に確立されたルート(list.js.erbをlist.html.erbに変更すると、ビューがレンダリングされるため、ルートは機能します)とコントローラーのメソッドがあります。リクエスト(def list .... end)を処理するために、後続のlist.js.erbは無視され、railsがフォームリクエストをhtmlとして処理しているため、テンプレートが見つからないというエラーが発生します。これはログで確認できます。

私は解決策を見つけることができるすべての場所を検索しましたが、動作しているアプリ、gemset、バージョン、および構成とほぼ同じである場合、ujsがこの特定のアプリで動作しない理由を理解できません。

私は人々が同じ問題を抱えているスタックオーバーフローに関する他のいくつかの記事を見つけましたが、最終的な、実用的な答えは与えられませんでした。

どんな助けや指示も大歓迎です。

4

1 に答える 1

1

それは確かにajaxが壊れているという問題でした。フォームの送信に使用したonkeyupトリガーは次のとおりです。

<%= form_tag list_path, :id => 'frmBookResults', :remote => true do %>
    <input id='keyword' type='text' onkeyup='document.forms["frmBookResults"].submit();'/>
<% end %>

次の点に注意してください。

document.forms["frmBookResults"].submit();

どうやら、javascriptを介してフォームを送信することが問題でした。これは、以下で説明するようにjquery送信を使用するようにonkeyupを更新すると、rails ujsが起動し、list.js.erbへのajax呼び出しが機能したためです。

onkeyup="jQuery('#frmBookResults').submit()"

すべてのフィードバックmccanffをありがとう!LinkedInのrailsグループの他の開発者と一緒にあなたの貢献は、私が最終的に私の問題を解決するのを助けました。

于 2012-12-12T23:21:17.520 に答える