我想在我的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方式。
答案 0 :(得分: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中需要一个路径的情况相当罕见,这样我就可以在需要时在我的JS中使用myapp.new_order_path
。
答案 1 :(得分:1)
在这里添加我的两分钱:您可以使用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使用简单的string.replace(':user_id:', user_id)
从模板编译URI。