Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails-将参数存储到数据库_Ruby On Rails_Ruby_Hash_Parameters - Fatal编程技术网

Ruby on rails RubyonRails-将参数存储到数据库

Ruby on rails RubyonRails-将参数存储到数据库,ruby-on-rails,ruby,hash,parameters,Ruby On Rails,Ruby,Hash,Parameters,我有一个POST请求中的哈希参数(它是一个ActionController::Parameters): 我想把它保存在我的数据库里。最好的方法是什么 我尝试将其转换为带有params.inspect的字符串,但不起作用,我还尝试序列化(params),但也失败了。 我的列是一个t.text,当我执行@purchase.update_attributes我的列:params时,我得到错误:ArgumentError(UTF-8中的无效字节序列) 谢谢您试过使用吗 在您的模型中 类购买

我有一个POST请求中的哈希参数(它是一个
ActionController::Parameters
):

我想把它保存在我的数据库里。最好的方法是什么

我尝试将其转换为带有params.inspect的字符串,但不起作用,我还尝试序列化(params),但也失败了。 我的列是一个t.text,当我执行
@purchase.update_attributes我的列:params
时,我得到错误:
ArgumentError(UTF-8中的无效字节序列)

谢谢

您试过使用吗

在您的模型中 类购买\xE9在St\xE9phane中是的unicode字符。您需要将其替换为“e”

2.1.0 :010 > a="St\xE9phane"
=> "St\xE9phane" 
2.1.0 :011 > a.scrub!('e')
=> "Stephane"
或者,您可以将数据库配置为使用unicode
.

在多次尝试都没有成功后,我决定绕过这个问题。 因为ByDatabase字段是一个文本列,所以我所做的是创建一个包含所有参数的字符串。之后,我可以将字符串存储到文本字段数据库列中

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

谢谢@pavelS,是的,我尝试了你的建议,但我得到了错误
ArgumentError(UTF-8中的字节序列无效)
@ZazOufUmI请阅读此
名字和
地址
引起问题的参数。修复您的编码可能会修复
serialize
的问题。我同意您关于
first_name
参数的意见,但我无法控制这些参数(来自用户)。我试过
.encode
但它返回
NoMethodError(未定义的方法encode!',用于#)
。对于
Serialize
返回
NoMethodError(未定义的方法Serialize'for#)
使用
params.map{x | x.try(:scrub)}
删除字符串中的所有无效字符。它内置于2.1中,早期版本也有gem。要接受嵌套哈希,您应该实现
deep\u map
(您可以用谷歌搜索,这里有一个选项)。请注意,serialize应在模型中使用,而不是在控制器中使用。您是否计划稍后使用此数据,还是仅用于日志记录目的?这是用户输入,因此我无法控制它。我会尽快尝试你的建议!谢谢
2.1.0 :010 > a="St\xE9phane"
=> "St\xE9phane" 
2.1.0 :011 > a.scrub!('e')
=> "Stephane"
parameters = String.new
params.each do |key, value|
  parameters += key + " = " + value + " | "
end