js-routes 添加 (::format) 到 url

js-routes adding (::format) to urls

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

我面临的问题是我正在尝试调用 "new" 资源方法并将 (::format) 按字面意义添加到 url 中,这当然会炸弹 localhost:3000/addresses/new(.:format) 是无效路径。

我参考了 routes-js 文档中指定的 "new_address_path" 路径。 url 的抽成输出如下:

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 路由文件。

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

Routes.new_address_path(format: 'js')

将生成如下内容:

/addresses/new.js

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

问题不是 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),
....

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

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

原文:Routes.new_address_path

固定:Routes.new_address_path()

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