2014-10-27 238 views
0

我已經從一個POST請求該散列PARAMS(它是一個ActionController::Parameters):Ruby on Rails的 - 存儲PARAMS數據庫

{"mc_gross"=>"1.00", "invoice"=>"28", "protection_eligibility"=>"Eligible", "address_status"=>"unconfirmed", "payer_id"=>"FSXBUQDGG6KWN", "tax"=>"0.00", "address_street"=>"Av. de la Pelouse, 87648672 Mayet", "payment_date"=>"14:46:27 Oct 27, 2014 PDT", "payment_status"=>"Completed", "charset"=>"windows-1252", "address_zip"=>"75002", "first_name"=>"St\xE9phane", "mc_fee"=>"0.34", "address_country_code"=>"FR", "address_name"=>"St\xE9phane XXX", "notify_version"=>"3.8", "custom"=>"", "payer_status"=>"verified", "business"=>"[email protected]", "address_country"=>"France", "address_city"=>"Paris", "quantity"=>"1", "verify_sign"=>"AumOxKSV7Re473t76kESkdv3agufAX.VzyW2dEiO-ul3gPNvbfQLzqXq", "payer_email"=>"[email protected]", "txn_id"=>"8MB257669F3772042", "payment_type"=>"instant", "last_name"=>"XXXX", "address_state"=>"Alsace", "receiver_email"=>"[email protected]", "payment_fee"=>"0.34", "receiver_id"=>"ZNER97N82WKY2", "txn_type"=>"web_accept", "item_name"=>"XXXX", "mc_currency"=>"USD", "item_number"=>"1", "residence_country"=>"FR", "test_ipn"=>"1", "handling_amount"=>"0.00", "transaction_subject"=>"", "payment_gross"=>"1.00", "shipping"=>"0.00", "ipn_track_id"=>"5db890c138b56", "controller"=>"purchases", "action"=>"hook"} 

我想將它保存在我的數據庫。 要做到這一點的最佳途徑是什麼?

我試圖將它轉換爲帶有params.inspect的字符串,但它不起作用,我也嘗試了序列化(params),但也失敗了。 我的專欄是t.text,當我做@purchase.update_attributes my_column: params,因爲它是我的錯誤:ArgumentError (invalid byte sequence in UTF-8)

感謝

+0

您是否計劃稍後使用此數據還是僅用於記錄目的? – Substantial 2014-10-27 22:34:28

+0

@實質上是爲了日誌目的 – 2014-10-27 22:37:41

回答

1

經過多次嘗試沒有任何成功,我決定繞過這個問題。 由於數據庫字段是一個文本列,我所做的就是創建一個所有我的參數的字符串。之後,我能夠將我的字符串存儲到我的文本字段數據庫列中。

parameters = String.new 
params.each do |key, value| 
    parameters += key + " = " + value + " | " 
end 
0

你有沒有嘗試過使用rails serialize

#in your model 
class Purchase < ActiveRecord::Base 
    serialize :my_column 
end 

#in controller 
def myaction 
    #... 
    @purchase.my_column = my_params 
    @purchase.save 
end 
+0

謝謝@pavelS,是的,我試過了你的提議,但是我得到錯誤'ArgumentError(UTF-8中的無效字節序列)' – 2014-10-27 22:16:12

+0

@ZazOufUmI請閱讀這個http://stackoverflow.com/問題/ 11375342/stringencode-not-fixing-invalid-byte-sequence-in-utf-8-error 'first_name'和'address' params導致該問題。修復你的編碼可能解決'serialize'的問題 – 2014-10-27 22:32:11

+0

我同意你關於'first_name'參數,但我無法控制這些參數(來自用戶)。我試過'.encode!',但是它返回'NoMethodError(未定義的方法編碼!'爲#)'。 'Serialize'返回'NoMethodError(未定義的方法序列化爲#)' – 2014-10-27 22:47:19

0

\ xE9在St \ xE9phane是一個Unicode字符的U+00E9。你需要用'e'替換它。

2.1.0 :010 > a="St\xE9phane" 
=> "St\xE9phane" 
2.1.0 :011 > a.scrub!('e') 
=> "Stephane" 

,或者你可以配置你的數據庫使用unicode store unicode in mysql

+0

這是用戶輸入,所以我無法控制它。我會盡快給你的建議!謝謝 – 2014-10-28 10:30:00