“set_restricted 中的块”:方法 column0= 不存在(Sequel::错误)

`block in set_restricted': method column0= doesn't exist (Sequel::Error)

我有这个代码:

require 'bundler/setup'
require 'sequel'
require 'sequel-rails'
require_relative 'support/benchmark_rails'
DB = Sequel.connect('sqlite::memory:')
COUNT=25 
Sequel.extension :migration
Sequel.migration do
  change do
    create_table(:users) do
      primary_key :id
      COUNT.times do |i|
       column :"column#{i}", "varchar(255)"
     end
    end
  end
end

class User < Sequel::Model; end

attributes = {}

COUNT.times do |i|
  attributes[:"column#{i}"] = "Some string #{i}"
end

Benchmark.rails("sequel/#{db_adapter}_create_string_columns", time: 5) do
  User.create(attributes)
end

但是当我尝试 运行 时,出现以下错误:

/home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:1759:in `block in set_restricted': method name= doesn't exist (Sequel::Error)
    from /home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:1746:in `each'
    from /home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:1746:in `set_restricted'
    from /home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:1257:in `set'
    from /home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:1715:in `initialize_set'
    from /home/aaditya/Downloads/ruby-bench-suite/rails/vendor/bundle/ruby/2.3.0/gems/sequel-3.40.0/lib/sequel/model/base.rb:899:in `initialize'
    from benchmarks/bm_sequel_create_string_columns.rb:34:in `new'
    from benchmarks/bm_sequel_create_string_columns.rb:34:in `<main>'

我试图简化它并尝试 运行 仅 User.create(:name=>'Bob') 但没有成功的结果。我犯了什么错误?

其他方法没有问题,因为相同的代码 运行ning 用于 Active Record。

您正在创建具有名称属性的用户,但您没有在您的用户 table 中创建名称列。

您只是在定义迁移,实际上您并不是 运行 数据库中的 CREATE TABLE。删除迁移代码,只需调用 DB.create_table.