2016-06-12 1 views
0

У меня есть этот код:`блок в set_restricted ': метод column0 = не существует (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'), но без успешных результатов. Какую ошибку я делаю?

Нет проблем с другими методами, поскольку тот же код работает для активной записи.

ответ

1

Вы просто определяете миграцию, вы фактически не используете CREATE TABLE в базе данных. Удалите код миграции и просто вызовите DB.create_table.

+0

Я сделал то же самое, и это сработало! –

0

Вы создаете пользователя с атрибутом имени, но у вас нет столбца имен в вашей созданной таблице пользователей.

+0

Я только что испытал с этим. Я отредактировал вопрос. Я все еще получаю эту ошибку. –

+0

Можете ли вы попробовать добавить attr_accessor: имя при попрошайничестве своего класса User? –

+0

Это странно. Я добавил attr_accessor: column0 в пользовательский класс и использовал только 'User.create (: column0 =>« Some string 0 »)'. Это дало мне эту ошибку: '' initialize ': SQLite3 :: SQLException: нет такой таблицы: пользователи (Sequel :: DatabaseError) ' –

Смежные вопросы