从外部脚本创建新的rails数据库记录?

时间:2011-08-04 13:20:31

标签: ruby-on-rails ruby post hash nested

我正在尝试通过HTTP#post_form从外部Ruby脚本向Rails应用发送POST请求。请求是create操作(即URI为http://server/controller)。

如果我将一个参数编码到请求中,一切都很好:

HTTP::post_form(uri, { :my_param => "value" })

虽然我必须在控制器中手动从my_param明确提取params。这似乎效率低下,并打破了从应用程序本身创建新记录(因为该参数不存在)。因此,我试图使我的脚本姿势为Rails本身,传递适当的数据,如控制器所期望的那样,例如。

HTTP::post_form(uri, { :object => { :my_param => "value" } })

然而,这不起作用。 post_form似乎正在将我的哈希转移到不同的东西,即

{ "object" => [\"my_param\", \"value\"] }

这显然不会做同样的事情。我错过了传递数据的方式吗?或者我可以达不到我想要的东西(从应用程序外部创建新记录)?

2 个答案:

答案 0 :(得分:1)

一种简单的方法可能是简单地模仿Rails如何格式化其参数,如下所示:

params = { :my_param => "value", ... }
params = Hash[params.map { |key,value| ["object[#{key}]",value] } ]

HTTP::post_form(uri, params)

编辑:好吧,看看那个,我看了一下,发现Rails实际上为你提供了一种使用自己的机制做同样事情的方法:

require 'active_support/core_ext'
...
HTTP::post(uri, parameters.to_param)

to_param方法将正确处理数组,以及其他所有方法。请注意,在这种情况下,您要使用HTTP::post,而不是post_form,因为参数已经转换为字符串。

答案 1 :(得分:1)

我对post_form了解不多,但对我来说自然的解决方案是使用ActiveResource对象。

ActiveResource可用于ruby以及Rails。你就像使用模型一样只使用它发布并使用XML 关于这是如何工作的Railscast

http://railscasts.com/episodes/94-activeresource-basics

http://railscasts.com/episodes/95-more-on-activeresource

我认为你会发现这比post_form更适合你的要求,但正如我所说,我不熟悉post_form。