Js-routes在url中添加(::format)

js-routes adding (::format) to urls

本文关键字:format 添加 url Js-routes      更新时间:2023-09-26

我有一个简单的rails项目,我一直在用reactjs玩。为了添加一些基本的导航,我引入了js-routes库,它可以很好地处理带有路径参数的url,例如"localhost:3000/addresses/1"。

我面临的问题是我试图调用一个"新"资源方法,它将(::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>

ENV:

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

问题路由:

resources :addresses

我在这里错过了什么?它似乎没有正确地解释rails路由文件

我不确定我是否明白你的问题。如果你想用格式后缀生成url,你可以在helper方法中使用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所发布的,您可以在父级中指定格式,但完全不使用它们是不可能的。