0

remote_actionの代わりにこのJavaScriptを使用しています:

$(document).ready(function() {
    $('#asset_category_id').change(function() {
        $.ajax({
            url : '<%= escape_javascript(url_for :controller => :categories, :action => :update_subcategories) %>',
    data : 'category_id=' + this.value,
    success : function(data) {
        $('#subcategories_div').html(data);
        $('#subcategories_div').show();
            }
        })
    });
});

次の行のURLが正しく形成されていません。

url : '<%= escape_javascript(url_for :controller => :categories, :action => :update_subcategories) %>'

文字通り使用されています:

http:// localhost:3000 / Assets /%3C%=%20escape_javascript(url_for%20:controller%20 =%3E%20:categories、%20:action%20 =%3E%20:updates_subcategories)%20 %% 3E?category_id = 156

jQueryでurl_forを使用するにはどうすればよいですか?出来ますか?

使用する場合

url : '/categories/update_subcategories'

すべてが期待どおりに実行されます。

編集: 私は運がなくて次のことを試しました。

@Matziと@Baldrickが指摘しているように、前処理(guides.rubyonrails.org/asset_pipeline.html#preprocessing)を使用する必要があるようです。そのため、ファイルはmain.js.erbである必要があります。このファイルの名前をapp/Assets/javascriptsに変更しました。アセット/新しいビュー(ファイルが必要な場所)に移動すると、次のエラーが発生します:

undefined method 'url_for' for #<#<Class:0x9853e4c>:0xab00c48>

次の2行をassets_controllerに追加しようとしました。

include ActionView::Helpers::UrlHelper
include ActionView::Helpers::TagHelper

それから私は得る:

undefined local variable or method `controller' for #<AssetsController:0xa40aaec>

ビューのこの行では:

<%= form_for(@asset) do |f| %>

また、これらの行をnew.html.erbファイルに追加しようとしました。

<%= include ActionView::Helpers::UrlHelper %>
<%= include ActionView::Helpers::TagHelper %>

それから私は得る:

undefined method `include' for #<#<Class:0xab164d0>:0xab0183c>

Rails 3で推奨されているように:rakeタスクでERbテンプレートをレンダリングする方法は?同様の場合。ビューとコントローラーで次のインクルードを試しましたが、同じ結果になりました。

include Rails.application.routes.url_helpers # brings ActionDispatch::Routing::UrlFor
include ActionView::Helpers::TagHelper

@Matziが推奨する、私が試したもう1つのことは、main.js.erbをapp / Assets /javascripts/からapp/views/assetsに移動することです。ただし、その場合、main.js.erbのJavascriptは、ビューnew.html.erbと同時にロードされないようです。main.js.erbの名前をnew.js.erbに変更しようとしましたが、ファイル内のJSもロードされていないようです。

JSを使用してハンドラーをアタッチし、js.erbを使用して結果を返す必要がありますが、どこを呼び出すかを知るために、最初のJSにurl_forが必要です。

したがって、問題は残ります。ビューのフィールドに変更ハンドラーをアタッチしようとするjs.erbでurl_forをどのように使用できますか?

4

2 に答える 2

2

問題は、それが.jsファイルにあり、rubyによって解釈されないことだと思います。このコードを.js.erbファイルに入れてみてください。そうすればうまくいきます。

アップデート:

アセットはこの種の動的な動作用ではないため、アセットを特定のビューに移動し、必要に応じてレンダリングすることをお勧めします。アセットで使用する場合は、.js.erbにヘルパーを含める必要があります。

<% environment.context_class.instance_eval { include ActionView::Helpers::UrlHelper } %>
<% environment.context_class.instance_eval { include ActionView::Helpers::TagHelper } %>
于 2012-04-28T17:59:22.713 に答える
2

js.erb に 2 行追加すると、次のようになります。

<% environment.context_class.instance_eval { include ActionView::Helpers::UrlHelper } %>
<% environment.context_class.instance_eval { include ActionView::Helpers::TagHelper } %>

別のものを取得しerror: undefined local variable or method '_routes' for #<#<Class:0x9078290>:0xa1bee8c>ます。上記の 2 行を次のように置き換えてください。

<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers} %>
于 2013-05-11T07:20:01.953 に答える