Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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:将多维数组从JSON提取到相应的模型_Ruby On Rails_Ruby_Arrays_Json - Fatal编程技术网

Ruby on rails RubyonRails:将多维数组从JSON提取到相应的模型

Ruby on rails RubyonRails:将多维数组从JSON提取到相应的模型,ruby-on-rails,ruby,arrays,json,Ruby On Rails,Ruby,Arrays,Json,我正在处理JSON,它的结构如下: "meals" {"en": [ ["Monday chicken sticks","Monday mozzarella salad"], [ "Tuesday schnitzel", "Tuesday soup"], [ "Spaghetti à la Wednesday"], ["Thursday salmon"], ["Curry of Friday"], ["Saturday sausages"]}

我正在处理JSON,它的结构如下:

 "meals" {"en": [
    ["Monday chicken sticks","Monday mozzarella salad"],
    [  "Tuesday schnitzel", "Tuesday soup"],
    [ "Spaghetti à la Wednesday"],
    ["Thursday salmon"],
    ["Curry of Friday"],
    ["Saturday sausages"]}
  ]
@meal = Meal.new #Meal is a model that contains the array
  #item is HTTParty response object
  @meal.en = item["meals"]["en"] #this is where program crashes: undefined method `[]' for nil:NilClass
  @meal.save
 "meals":
  {"en": 
    {
      "Monday":    ["chicken sticks", "mozzarella salad"],
      "Tuesday":   ["schnitzel", "soup"],
      "Wednesday": ["spaghetti"],
      "Thursday":  ["salmon"],
      "Friday":    ["curry"],
      "Saturday":  ["sausages"]
    }
  }
meals
   id 
   name

menu 
   id
   day

meals_menus
   meal_id
   menu_id
#app/models/meal.rb
Class Meal < ActiveRecord::Base
    has_and_belongs_to_many :menus
end

#app/models/menu.rb
Class Menu < ActiveRecord::Base
    has_and_belongs_to_many :meals
end
因此,“en”数组的索引对应于一周中的几天,而内部数组对应于当天的菜单

现在我的问题是,我正试图将数据以序列化数组的形式保存到数据库中。我可以手动执行此操作,但在解析JSON时不能。我的代码如下所示:

 "meals" {"en": [
    ["Monday chicken sticks","Monday mozzarella salad"],
    [  "Tuesday schnitzel", "Tuesday soup"],
    [ "Spaghetti à la Wednesday"],
    ["Thursday salmon"],
    ["Curry of Friday"],
    ["Saturday sausages"]}
  ]
@meal = Meal.new #Meal is a model that contains the array
  #item is HTTParty response object
  @meal.en = item["meals"]["en"] #this is where program crashes: undefined method `[]' for nil:NilClass
  @meal.save
 "meals":
  {"en": 
    {
      "Monday":    ["chicken sticks", "mozzarella salad"],
      "Tuesday":   ["schnitzel", "soup"],
      "Wednesday": ["spaghetti"],
      "Thursday":  ["salmon"],
      "Friday":    ["curry"],
      "Saturday":  ["sausages"]
    }
  }
meals
   id 
   name

menu 
   id
   day

meals_menus
   meal_id
   menu_id
#app/models/meal.rb
Class Meal < ActiveRecord::Base
    has_and_belongs_to_many :menus
end

#app/models/menu.rb
Class Menu < ActiveRecord::Base
    has_and_belongs_to_many :meals
end

我想我是做错了作业,或者一开始就做不到。有没有办法解决这个问题,或者我应该用一个包含当天菜单的一维数组创建一个天数模型?

那么您想在数据库中保存数组吗

如果您执行
项目[“膳食”][“en”]
,您将在周一有两个条目-这是如何工作的?您需要能够为模型的每个属性指定一个条目,如下所示:

 "meals" {"en": [
    ["Monday chicken sticks","Monday mozzarella salad"],
    [  "Tuesday schnitzel", "Tuesday soup"],
    [ "Spaghetti à la Wednesday"],
    ["Thursday salmon"],
    ["Curry of Friday"],
    ["Saturday sausages"]}
  ]
@meal = Meal.new #Meal is a model that contains the array
  #item is HTTParty response object
  @meal.en = item["meals"]["en"] #this is where program crashes: undefined method `[]' for nil:NilClass
  @meal.save
 "meals":
  {"en": 
    {
      "Monday":    ["chicken sticks", "mozzarella salad"],
      "Tuesday":   ["schnitzel", "soup"],
      "Wednesday": ["spaghetti"],
      "Thursday":  ["salmon"],
      "Friday":    ["curry"],
      "Saturday":  ["sausages"]
    }
  }
meals
   id 
   name

menu 
   id
   day

meals_menus
   meal_id
   menu_id
#app/models/meal.rb
Class Meal < ActiveRecord::Base
    has_and_belongs_to_many :menus
end

#app/models/menu.rb
Class Menu < ActiveRecord::Base
    has_and_belongs_to_many :meals
end
如果您这样构造JSON,它将允许您保存到数据库的不同属性中。然后我会像这样设置我的桌子:

 "meals" {"en": [
    ["Monday chicken sticks","Monday mozzarella salad"],
    [  "Tuesday schnitzel", "Tuesday soup"],
    [ "Spaghetti à la Wednesday"],
    ["Thursday salmon"],
    ["Curry of Friday"],
    ["Saturday sausages"]}
  ]
@meal = Meal.new #Meal is a model that contains the array
  #item is HTTParty response object
  @meal.en = item["meals"]["en"] #this is where program crashes: undefined method `[]' for nil:NilClass
  @meal.save
 "meals":
  {"en": 
    {
      "Monday":    ["chicken sticks", "mozzarella salad"],
      "Tuesday":   ["schnitzel", "soup"],
      "Wednesday": ["spaghetti"],
      "Thursday":  ["salmon"],
      "Friday":    ["curry"],
      "Saturday":  ["sausages"]
    }
  }
meals
   id 
   name

menu 
   id
   day

meals_menus
   meal_id
   menu_id
#app/models/meal.rb
Class Meal < ActiveRecord::Base
    has_and_belongs_to_many :menus
end

#app/models/menu.rb
Class Menu < ActiveRecord::Base
    has_and_belongs_to_many :meals
end
这将允许您将一顿饭保存为
鸡肉棒
,并将其分配给
星期一
。您可以这样设置您的模型:

 "meals" {"en": [
    ["Monday chicken sticks","Monday mozzarella salad"],
    [  "Tuesday schnitzel", "Tuesday soup"],
    [ "Spaghetti à la Wednesday"],
    ["Thursday salmon"],
    ["Curry of Friday"],
    ["Saturday sausages"]}
  ]
@meal = Meal.new #Meal is a model that contains the array
  #item is HTTParty response object
  @meal.en = item["meals"]["en"] #this is where program crashes: undefined method `[]' for nil:NilClass
  @meal.save
 "meals":
  {"en": 
    {
      "Monday":    ["chicken sticks", "mozzarella salad"],
      "Tuesday":   ["schnitzel", "soup"],
      "Wednesday": ["spaghetti"],
      "Thursday":  ["salmon"],
      "Friday":    ["curry"],
      "Saturday":  ["sausages"]
    }
  }
meals
   id 
   name

menu 
   id
   day

meals_menus
   meal_id
   menu_id
#app/models/meal.rb
Class Meal < ActiveRecord::Base
    has_and_belongs_to_many :menus
end

#app/models/menu.rb
Class Menu < ActiveRecord::Base
    has_and_belongs_to_many :meals
end
#app/models/mean.rb
类餐
看起来其中一个项目中不存在fends或en,我预感这是由于一些小疏忽,令人尴尬的是,我假设JSON总是包含“en”数组,即使它是空的。现在使用@fine.en=item[“founds”][“en”],除非item[“founds”][“en”]。无?它很好用。谢谢巴鲁指导盲人。还有一点补充:语法也错了。它应该是@fine.en=item[“fines”[“en”]]