Ruby 通过Sinatra在续集中创造新记录
我有以下型号:Ruby 通过Sinatra在续集中创造新记录,ruby,sinatra,sequel,Ruby,Sinatra,Sequel,我有以下型号: DB.create_table :teams do primary_key :id column :name, :text, :unique=>true end DB.create_table :players do primary_key :id column :name, :text, :unique=>true column :position, :text foreign_key :team_id end class Tea
DB.create_table :teams do
primary_key :id
column :name, :text, :unique=>true
end
DB.create_table :players do
primary_key :id
column :name, :text, :unique=>true
column :position, :text
foreign_key :team_id
end
class Team < Sequel::Model
plugin :json_serializer
one_to_many :players
end
class Player < Sequel::Model
plugin :serialization, :json
many_to_one :teams
end
DB.create_表:团队做
主键:id
列:name,:text,:unique=>true
结束
DB.create_表:玩家可以
主键:id
列:name,:text,:unique=>true
列:位置,:文本
外键:团队id
结束
类团队
我的完整代码看起来像
require 'rubygems'
require 'sequel'
require 'sinatra'
require 'db' #model file
require 'thread'
require 'json'
require "sinatra/reloader" if development? # reload
before do
@teams = Team.all
end
get '/teams/:id' do |id|
@team = Team[id]
haml :team_view
end
post '/teams/?' do
Team.create(:name => 'FC Barcelona')
#here: Read error: #<NoMethodError: undefined method `bytesize' for [:name, "FC Barcelona"]:Array>
end
需要“rubygems”
需要“续集”
需要“sinatra”
需要“db”#模型文件
需要“线程”
需要“json”
如果开发需要“sinatra/重新装载机”?#重新加载
在做之前
@团队=团队
结束
获取“/teams/:id”do | id|
@团队=团队[id]
haml:团队视图
结束
发布'/teams/?'do
创建(:name=>‘巴塞罗那足球俱乐部’)
#此处:读取错误:#由于没有名为“name”的变量,您的第一个创建无法按编写的方式工作。也许你的意思是b.name=jdata
对于我来说,它使用有效的name属性,调用create
也可以正常工作:
require 'sequel'
p Sequel::VERSION #=> "3.15.0"
DB = Sequel.sqlite
DB.create_table :teams do
primary_key :id
column :name, :text, :unique=>true
end
DB.create_table :players do
primary_key :id
column :name, :text, :unique=>true
column :position, :text
foreign_key :team_id
end
class Team < Sequel::Model
plugin :json_serializer
one_to_many :players
end
class Player < Sequel::Model
plugin :serialization, :json
many_to_one :teams
end
begin
Team.new do |b|
b.name = name
b.save
end
rescue Exception=>e
p e
#=> #<NameError: undefined local variable or method `name' for main:Object>
end
Team.new do |b|
b.name = "Boo!"
b.save
end
Team.create(:name => 'FC Barcelona')
p Team.all
# [
# #<Team @values={:id=>1, :name=>"Boo!"}>,
# #<Team @values={:id=>2, :name=>"FC Barcelona"}>
# ]
需要“续集”
p续集::版本#=>“3.15.0”
DB=Sequel.sqlite
DB.create_表:团队做
主键:id
列:name,:text,:unique=>true
结束
DB.create_表:玩家可以
主键:id
列:name,:text,:unique=>true
列:位置,:文本
外键:团队id
结束
类团队e
体育课
#=>#你说它不工作是什么意思?我不确定JSON与你的问题有什么关系。你不应该在Model.new块中调用save。相反,请使用“创建”而不是“新建”(创建还需要一个可选块)。
require 'sequel'
DB = Sequel.sqlite
DB.create_table :teams do
primary_key :id
column :name, :text, :unique=>true
end
class Team < Sequel::Model; end
Team.create(:name => 'FC Barcelona')
p Team.all