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) %>'
文字通り使用されています:
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をどのように使用できますか?