Ruby on Rails的 - 存储PARAMS数据库
我已经从一个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)
感谢
经过多次尝试没有任何成功,我决定绕过这个问题。 由于数据库字段是一个文本列,我所做的就是创建一个所有我的参数的字符串。之后,我能够将我的字符串存储到我的文本字段数据库列中。
parameters = String.new
params.each do |key, value|
parameters += key + " = " + value + " | "
end
你有没有尝试过使用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
谢谢@pavelS,是的,我试过了你的提议,但是我得到错误'ArgumentError(UTF-8中的无效字节序列)' – 2014-10-27 22:16:12
@ZazOufUmI请阅读这个http://*.com/问题/ 11375342/stringencode-not-fixing-invalid-byte-sequence-in-utf-8-error 'first_name'和'address' params导致该问题。修复你的编码可能解决'serialize'的问题 – 2014-10-27 22:32:11
我同意你关于'first_name'参数,但我无法控制这些参数(来自用户)。我试过'.encode!',但是它返回'NoMethodError(未定义的方法编码!'为#
\ 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。
这是用户输入,所以我无法控制它。我会尽快给你的建议!谢谢 – 2014-10-28 10:30:00
您是否计划稍后使用此数据还是仅用于记录目的? – Substantial 2014-10-27 22:34:28
@实质上是为了日志目的 – 2014-10-27 22:37:41