从Ruby中的嵌套哈希创建关系表



我正在尝试使用基于嵌套哈希的红宝石续集来创建表。

有数十个哈希包含数十个阵列和哈希阵列,但假设我有以下嵌套哈希;

{name:'Bob', age: 40, hobbies: [{title: 'breakdancing', skill: 10}, {title: 'yodeling', skill: 7}], favorite_foods: ["Broccoli", "Sardines"]}

按编程创建关系表的最清洁方法是什么?假设使用哈希说"用户","爱好"one_answers"食物"?然后,我必须进入并设置字段类型吗?

我只是在学习Ruby,但似乎可以手动创建字段,然后手动映射和分配了从完美良好的哈希。

根据您可以使用的续集文档" create_table ...用于在数据库中添加新表"。

create_table(:artists) do
  primary_key :id
  String :name
end

所以,是的 - 您需要为每个嵌套阵列或哈希时要做一次。您可能首先要经过将这些哈希变成波罗斯(普通旧红宝石对象)的行动,因为您可以利用这些类来创建桌子。

答案在于嵌套属性插件。可以在下面获得更多信息。是的,这不会神奇地创建表,而是允许一口写作。

http://www.nerdgem.com/tutorials/3-adding-nested-attributes-to-models

require 'sequel'
DB = Sequel.sqlite('user_test.db')
#DB.create_table(:users) do
#  primary_key :user_id
#  String :name
#end
#
#DB.create_table(:skills) do
#  primary_key :skill_id
#  Integer :user_id
#  String :desc
#  Integer :level
#end
#Models;
class User < Sequel::Model
  one_to_many :skills
  self.plugin :instance_hooks
  self.plugin :nested_attributes
end
class Skill < Sequel::Model
  many_to_one :user
end

User.nested_attributes :skills
#Ruby Hash;
user_info = {:name => "Mike", :skills_attributes => [{:desc => "Curling", :level => 3}, {:desc => "Sorcery", :level => 4}]}
p record = User.create(user_info)

最新更新