0

我想在我的 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 的正确方法。

4

2 回答 2

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 中需要一个路由的情况相当罕见,这样我就可以myapp.new_order_path在我需要的时候在我的 JS 中使用它。

于 2012-12-04T11:01:52.080 回答
1

只是在这里添加我的两分钱:您可以使用 Rails URI 帮助程序来生成某种 URI 模板。例如,如果您定义了这条路线:

edit_user GET /users/:id/edit(.:format) users#edit

而你调用它就好edit_user_path(':user_id:')了,它会返回/users/:user_id:/edit。通过这种方式,您可以生成 URI 模板以由 javascript 编译。正如@Tigraine 所说,您可以将其包含在某个顶级元素的数据属性中,并从客户端使用它。

它确实出现在您需要为 AJAX 获取的资源生成 URI 的情况下:您只需提供资源 id 并让 javascript 使用简单的string.replace(':user_id:', user_id).

于 2015-04-15T07:14:33.163 回答