我正在使用这个 javascript 代替 remote_action:
$(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>
我尝试将这两行添加到 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 推荐的我尝试过的另一件事是将 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 来尝试将更改处理程序附加到视图中的字段?