Ruby on rails RubyonRails:将多维数组从JSON提取到相应的模型
我正在处理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"]}
"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”]]