我正在尝试使用基于嵌套哈希的Ruby Sequel创建表。
有几十个哈希包含数十个数组和哈希数组,但是假设我有以下嵌套哈希值;
{name:'Bob', age: 40, hobbies: [{title: 'breakdancing', skill: 10}, {title: 'yodeling', skill: 7}], favorite_foods: ["Broccoli", "Sardines"]}
以编程方式创建关系表的最简洁方法是什么?让我们说'用户','爱好'和'食物'使用哈希?那么我是否必须进入并设置字段类型?
我只是在学习Ruby,但是手动创建字段然后手动映射并从完美的哈希值中分配值似乎适得其反。
答案 0 :(得分:0)
根据Sequel documentation,您可以使用“create_table ...将新表添加到数据库”。
create_table(:artists) do
primary_key :id
String :name
end
所以,是的 - 你需要为每个嵌套数组或哈希做一次,你想要成为单独的表。您可能希望首先完成将这些哈希变为PORO(Plain Old Ruby Objects)的练习,然后您可以利用这些类来创建表。
答案 1 :(得分:0)
答案在于嵌套属性插件。更多信息可以在下面获得。是的,这并不会神奇地创建表格,但会允许一举写作。
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)