我正在尝试使用grape创建一个API,它会在发布时将JSON数据保存到PostgreSQL。 以下是JSON示例:
{
"about": "this is about me",
"company_name": "David Co",
"company_url": "http://google.com",
"created_at": "2013-02-03T13:09:37+05:30",
"email": "jones@david.com",
"first_name": "David",
"google_plus": "http://google.com",
"id": 1
}
这是Ruby代码:
class Posts < Grape::API
version 'v1', :using => :path
format :json
resource 'posts' do
get "/" do
Post.all
end
get "/:id" do
Post.find(params['id'])
end
post "/create" do
Post.create(params['post'])
end
end
end
我正在关注此sample,它适用于上述JSON。
如何修改代码以使其适用于更复杂的JSON,如:
{
"about": "this is about me",
"company_name": "David Co",
"company_url": "http://google.com",
"created_at": "2013-02-03T13:09:37+05:30",
"email": "jones@david.com",
"first_name": "David",
"google_plus": "http://google.com",
"id": 1,
"chall": [{
"attributes": {
"type": "tegory__c",
"url": "/services0/sobjects/__c/a08Z0000000RmoTIAS"
}
}
以下是当前的数据库架构:
create_table :posts do |t|
t.string :first_name
t.string :email
t.string :company_name
t.string :google_plus
t.string :about
t.string :company_url
t.timestamps
end
答案 0 :(得分:1)
您的attributes
将成为一个单独的表格,包括类型和网址。然后,您的chall
将成为从单个posts
行映射到多个attributes
行的链接表。这允许您将此格式的数据放入数据库中。
当然,只有attributes
的一个条目,很难提供完整的架构,但这可以让您了解如何将它们组合在一起。
请注意,如果您希望在JSON看起来像这样的情况下可以简化:
"chall": [{
"type": "tegory__c",
"url": "/services0/sobjects/__c/a08Z0000000RmoTIAS"
}]
因为那时chall
将是posts
的直接一对多链接,但是由于示例JSON中缺少数据,因此很难判断这是否有效。但是,希望这可以指出你正确的方向。
如果我假设前者,那么您的架构看起来像这样:
create_table :posts do |t|
t.string :first_name
t.string :email
t.string :company_name
t.string :google_plus
t.string :about
t.string :company_url
t.timestamps
end
create_table : attributes do |t|
t.string :type
t.string :url
end
create_table post_attributes do |t|
t.references : posts
t.references : attributes
end
在这种情况下,帖子和属性之间存在多对多关系。