2

我有一个简单的 Rails 项目,我一直在使用 reactjs。为了添加一些基本导航,我引入了 js-routes 库,它适用于具有路径参数(例如“localhost:3000/addresses/1”)的 url。

我面临的问题是我试图调用一个“新”资源方法,并将 (::format) 从字面上添加到 url 中,这当然作为 localhost:3000/addresses/new(.:format) 是无效的小路。

我引用了 routes-js 文档中指定的“new_address_path”路径。此 url 的 rake 输出如下:

new_address_path    GET /addresses/new(.:format)    addresses#new

利用上述路径的 HTML 片段如下所示:

<a href={Routes.new_address_path}>Create am address</a>

环境:

-Ruby: 2.2.4
-Rails: 4.2.6
-js-routes: 1.2.8

有问题的路线:

resources :addresses

我在这里想念什么?似乎它没有正确解释 rails 路线文件。

4

3 回答 3

0

抱歉,我以为我在这里发布了我的解决方案。

问题不是 js-routes 而是我的 AJAX 调用,我将内容类型设置为 JSON,并且我认为它正在使用内置方法将我的对象转换为 JSON。这不是真的,您需要通过 JSON.stringify(obj) 手动将对象转换为 JSON。

旧的ajax调用:

....
url: Routes.feedback_path(),
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data: obj,
....

新的ajax调用:

....
url: Routes.feedback_path(),
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data: JSON.stringify(obj),
....
于 2016-12-13T05:10:57.213 回答
0

您可能已经找到了解决方案,但您最初的问题使用js-routes,或者更确切地说是您对它的使用。

您必须提供括号才能从 js-routes 获得正确的输出。

原来的:Routes.new_address_path

固定的:Routes.new_address_path()

正如 smefju 发布的那样,您可以在括号中指定格式,但完全不使用它们不是一种选择。

于 2018-05-01T01:27:04.020 回答
0

我不确定我是否收到了你的问题。如果要生成带有格式后缀的 url,可以使用format辅助方法中的选项。例如:

Routes.new_address_path(format: 'js')

会产生这样的东西:

/addresses/new.js
于 2016-08-10T09:58:29.420 回答