Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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 为什么我不能设置此哈希键的值? task={:project=>1000, :顺序=>0, :部分图像=>nil, :选项=>{ :高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>0} project=redis.hget('active_projects',task[:project]) => {:name=>“Pov”, :任务=> {0=> {:project=>1000, :顺序=>0, :部分图像=>nil, :选项=> {:高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>“blabla” } } }, :id=>1000, :image=>“”, :选项=> {:高度=>100, :宽度=>50, :scene=>“blabla” } } 任务[:partial_image]=“blabla” 项目[:任务][任务[:顺序]]=任务#这是第37行 失败/错误:已完成任务=DPovray::task.perform(任务) 类型错误: 无法将符号转换为整数 #./lib/jobs/job.rb:37:in`[]中 #./lib/jobs/job.rb:37:in'block in perform' #/lib/jobs/job.rb:35:in'perform' #./spec/task_spec.rb:22:in'block(4层)in'_Ruby - Fatal编程技术网

Ruby 为什么我不能设置此哈希键的值? task={:project=>1000, :顺序=>0, :部分图像=>nil, :选项=>{ :高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>0} project=redis.hget('active_projects',task[:project]) => {:name=>“Pov”, :任务=> {0=> {:project=>1000, :顺序=>0, :部分图像=>nil, :选项=> {:高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>“blabla” } } }, :id=>1000, :image=>“”, :选项=> {:高度=>100, :宽度=>50, :scene=>“blabla” } } 任务[:partial_image]=“blabla” 项目[:任务][任务[:顺序]]=任务#这是第37行 失败/错误:已完成任务=DPovray::task.perform(任务) 类型错误: 无法将符号转换为整数 #./lib/jobs/job.rb:37:in`[]中 #./lib/jobs/job.rb:37:in'block in perform' #/lib/jobs/job.rb:35:in'perform' #./spec/task_spec.rb:22:in'block(4层)in'

Ruby 为什么我不能设置此哈希键的值? task={:project=>1000, :顺序=>0, :部分图像=>nil, :选项=>{ :高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>0} project=redis.hget('active_projects',task[:project]) => {:name=>“Pov”, :任务=> {0=> {:project=>1000, :顺序=>0, :部分图像=>nil, :选项=> {:高度=>50, :宽度=>50, :start_row=>1, :开始列=>1, :end_行=>50, :end_列=>50, :scene=>“blabla” } } }, :id=>1000, :image=>“”, :选项=> {:高度=>100, :宽度=>50, :scene=>“blabla” } } 任务[:partial_image]=“blabla” 项目[:任务][任务[:顺序]]=任务#这是第37行 失败/错误:已完成任务=DPovray::task.perform(任务) 类型错误: 无法将符号转换为整数 #./lib/jobs/job.rb:37:in`[]中 #./lib/jobs/job.rb:37:in'block in perform' #/lib/jobs/job.rb:35:in'perform' #./spec/task_spec.rb:22:in'block(4层)in',ruby,Ruby,密码在里面 失败的测试可以使用rspec spec/task\u spec.rb运行。实际上project=redis.hget('active\u projects',task[:project])返回的是字符串,而不是ruby哈希。这就是它失败的原因 我在玩,看我能不能做我想做的事 此外,与其做: task = {:project=>1000, :order=>0, :partial_image=>nil, :optio

密码在里面


失败的测试可以使用
rspec spec/task\u spec.rb运行。实际上
project=redis.hget('active\u projects',task[:project])
返回的是字符串,而不是ruby哈希。这就是它失败的原因

我在玩,看我能不能做我想做的事

此外,与其做:

task = {:project=>1000, 
        :order=>0, 
        :partial_image=>nil, 
        :options=>{
           :height=>50, 
           :width=>50, 
           :start_row=>1, 
           :start_column=>1, 
           :end_row=>50, 
           :end_column=>50, 
           :scene=>0}}

project = redis.hget('active_projects', task[:project])        
=> 
{:name=>"Pov", 
 :tasks=>
        {0=>
            {:project=>1000, 
             :order=>0, 
             :partial_image=>nil, 
             :options=>
                 {:height=>50, 
                  :width=>50, 
                  :start_row=>1, 
                  :start_column=>1, 
                  :end_row=>50, 
                  :end_column=>50, 
                  :scene=>"blabla"
                 }
             }
         }, 
  :id=>1000,
  :image=>"", 
  :options=>
        {:height=>100, 
         :width=>50,  
         :scene=>"blabla"
        }
   }

task[:partial_image] = 'blablabla'    
project[:tasks][task[:order]] = task    # this is line 37

 Failure/Error: completed_task = DPovray::Task.perform(task)
 TypeError:
   can't convert Symbol into Integer
 # ./lib/jobs/job.rb:37:in `[]'
 # ./lib/jobs/job.rb:37:in `block in perform'
 # ./lib/jobs/job.rb:35:in `perform'
 # ./spec/task_spec.rb:22:in `block (4 levels) in <top (required)>'
你可以做:

Redis.new.hset('active_projects', active_project[:id], active_project)
多亏了散列编组,它才起作用

但是,我不认为这是一个好的解决办法。我不喜欢使用封送处理,因为通过查看数据库进行调试非常困难

而且我刚刚得到一个:

Redis.new.hset('active_projects', active_project[:id], Marshal.dump(active_project))
因此,让我们发现一种不同的方法

编辑:

现在我正在使用JSON.dump和JSON.parse。它们似乎是更好的方法

编辑:

我最终把这个散列封装成了一个真实的对象。所以我有项目类和任务类。在每一种方法中,我都定义了方法
to_json
self.json_create(o)
,它们可以转换为json或从json转换而来


它运行得很好。

您确定项目看起来像您所说的那样吗?你能发布一个实际的可运行的示例来重现错误吗?@sepp2k:当然,在上签出代码并运行rspec spec/task_spec。rb@sepp2k:这是一个非常奇怪的错误。1.30小时,我还不知道到底是怎么回事。试着显示
project[:tasks]
task[:order]
@sawa:puts project[:tasks]给我的是不能将符号转换成整数的#/lib/jobs/job.rb:37:in`[]'
 incompatible marshal file format (can't be read)
    format version 4.8 required; 123.58 given