2016-06-12 4 views
0

Ich habe diesen Code:`Block in set_restricted ': Methode column0 = existiert nicht (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 

Aber wenn ich versuche, dies zu laufen, gibt es folgende Fehlermeldung:

/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>' 

Ich versuchte, dies zu vereinfachen und versuchte nur User.create(:name=>'Bob') zu laufen, aber mit keinen erfolgreichen Ergebnissen. Welchen Fehler mache ich?

Es gibt keine Probleme mit den anderen Methoden, da der gleiche Code für Active Record ausgeführt wird.

Antwort

1

Sie definieren nur die Migration, Sie führen die CREATE TABLE nicht tatsächlich auf der Datenbank aus. Entfernen Sie den Migrationscode und rufen Sie einfach DB.create_table an.

+0

Ich tat das Gleiche und es hat funktioniert! –

0

Sie erstellen Benutzer mit Namensattribut, aber Sie haben keine Namensspalte in Ihrer Benutzertabelle erstellt.

+0

Ich habe gerade damit getestet. Ich habe die Frage bearbeitet. Ich erhalte immer noch diesen Fehler. –

+0

Können Sie versuchen, attr_accessor: name am Anfang Ihrer Benutzerklasse hinzuzufügen? –

+0

Das ist seltsam. Ich habe attr_accessor: column0 in der Benutzerklasse hinzugefügt und nur 'User.create (: column0 =>" Some string 0 ")' verwendet. Dies gab mir diesen Fehler: "Initialisieren": SQLite3 :: SQLException: keine solche Tabelle: Benutzer (Sequel :: DatabaseError) ' –

Verwandte Themen