Ваше первое создание не работает как написано, потому что у вас нет переменной с именем "name".Возможно, вы имели в виду b.name = jdata
?
Это работает для меня с допустимым атрибутом имени, и вызов 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"}>
# ]
Вам нужно поделитьсяподробности, чтобы мы могли воспроизвести вашу проблему, прежде чем мы сможем помочь.Также обратите внимание, что ваш код включает в себя несколько красных сельдей, которые я включил выше только для полноты.Таблица Player, модель, отношения и сериализация JSON не влияют на мой тестовый пример.Код также может быть:
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