js-routes将(:: format)添加到网址

时间:2016-08-10 05:30:02

标签: javascript ruby-on-rails ruby ruby-on-rails-4 js-routes

我有一个简单的rails项目,我一直在使用reactjs。为了添加一些基本的导航,我带来了js-routes库,它适用于具有路径参数的网址,例如" localhost:3000 / addresses / 1"。

我面临的问题是我试图打电话给"新的"资源方法,它将(:: format)字面上添加到url当然是炸弹,因为localhost:3000 / addresses / new(。:format)是一个无效的路径。

我引用" new_address_path" routes-js docs中指定的路径。此网址的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路由文件。

3 个答案:

答案 0 :(得分:0)

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

Routes.new_address_path(format: 'js')

将生成如下内容:

/addresses/new.js

答案 1 :(得分: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),
....

答案 2 :(得分:0)

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

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

原文:Routes.new_address_path

修正:Routes.new_address_path()

正如smefju发布的那样,你可以在parens中指定格式,但完全不让它们离开。