Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 提取散列的错误值_Ruby On Rails - Fatal编程技术网

Ruby on rails 提取散列的错误值

Ruby on rails 提取散列的错误值,ruby-on-rails,Ruby On Rails,我有这个杂烩 obj= {"User"=>["user_error", "Jack", "Jill1"], "Project"=>[ "project_error", "xxx"], "Task"=>[39], "Date"=>"date_error", "Time (Hours)"=>["time_error", "-2"], "Comment"=>"comment_error"} 我必须提取密钥的错误值并将它们存储在其他位置 .最终结果应该是 error

我有这个杂烩

obj= {"User"=>["user_error", "Jack", "Jill1"], "Project"=>[ "project_error", "xxx"], "Task"=>[39], "Date"=>"date_error", "Time (Hours)"=>["time_error", "-2"], "Comment"=>"comment_error"}
我必须提取密钥的错误值并将它们存储在其他位置 .最终结果应该是

error = ["user_error", "project_error","date_error","time_error","comment_error"]


obj = {"User"=>["Jack", "Jill1"], "Project"=>[ "xxx"], "Task"=>[39], "Date"=>nil, "Time (Hours)"=>["-2"], "Comment"=>nil}

有人能帮你吗?

你可以做以下几点:

errors = []
obj.map do |class_name, strings| 
  errors.push(strings.shift) # shift remove the first element of the array
  obj[class_name] = strings
end

不太漂亮,但你可以这样做:

errors = obj.each_with_object([]) do |(k, v), err|
  if v.is_a?(Array) && v.first =~ /_error$/
    err << v.shift
  elsif v =~ /_error$/
    err << v
    obj[k] = nil
  end
end

您可以通过首先将所有值转换为数组来稍微干燥代码,但是对于
Date
Comment
键,您将得到空数组,而不是
nil

errors = obj.each_with_object([]) do |(k, v), err|
  obj[k] = v = [v].flatten
  err << v.shift if v.first =~ /_error$/
end

errors
#=> ["user_error", "project_error", "date_error", "time_error", "comment_error"]

obj
#=> {"User"=>["Jack", "Jill1"], "Project"=>["xxx"], "Task"=>[39], "Date"=>[], "Time (Hours)"=>["-2"], "Comment"=>[]}
errors=obj。每个带有对象([])的对象都做(k,v),err|
obj[k]=v=[v]。展平
错误[“用户错误”、“项目错误”、“日期错误”、“时间错误”、“注释错误”]
obj
#=>{“用户”=>[“杰克”,“吉尔1”],“项目”=>[“xxx”],“任务”=>[39],“日期”=>[],“时间(小时)”=>[“-2”],“评论”=>[]

到目前为止您做了什么?给我们看看你的代码。
errors = obj.each_with_object([]) do |(k, v), err|
  obj[k] = v = [v].flatten
  err << v.shift if v.first =~ /_error$/
end

errors
#=> ["user_error", "project_error", "date_error", "time_error", "comment_error"]

obj
#=> {"User"=>["Jack", "Jill1"], "Project"=>["xxx"], "Task"=>[39], "Date"=>[], "Time (Hours)"=>["-2"], "Comment"=>[]}