2011-08-04 115 views
1

我想通過HTTP#post_form從外部Ruby腳本發送POST請求到Rails應用程序。該請求是針對create動作(即,該URI是http://server/controller)。從外部腳本創建新的rails數據庫記錄?

如果我編碼一個參數到請求,一切都很好:

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

雖然我必須明確地從params手動拉出my_param,在控制器中。這看起來效率不高,並且會在應用程序本身內部創建新記錄(因爲該參數不存在)。因此,我試圖讓自己的腳本像Rails本身一樣,按照控制器期望的那樣傳遞適當的數據,例如,

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

但是,這是行不通的。 post_form似乎逃避我的哈希成不同的東西,即

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

這顯然不會做同樣的事情。我在傳遞數據的方式中缺少明顯的東西嗎?或者我能否達到我的目標(從應用程序外部創建新記錄)?

回答

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,因爲參數已經轉換爲字符串。

+0

優秀,作品謝謝!但是,當值是數組時它似乎分解了。你不會碰巧知道如何處理這種情況嗎? – kfb

+0

查看我編輯的帖子 –

+0

太棒了,這是正確的排序。乾杯! – kfb

1

我對post_form瞭解不多,但對我來說自然的解決方案是使用ActiveResource對象。

ActiveResource可用於ruby以及Rails。你使用它,就像你使用一個模型只有它張貼,並使用XML 有關於如何在這裏工作

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

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

我想你會發現這是一個一個Railscast得到更適合您的要求比post_form,但正如我所說,我不熟悉post_form。

+0

謝謝,我會看看那個。我試圖保持依賴關係,但我同意它看起來像我想要的:) – kfb

+0

經過一番玩,這種方法的唯一缺點是,它似乎目前不支持ActiveRecord關聯(例如has_and_belongs_to_many)。 – kfb

+0

您可以支持相關表格,但必須創建自己的xml模板以包含所需的記錄。我會盡力找到時間來更新我的答案。 – jamesc

相關問題