는 그들은 Sequel::Plugins::Schema::ClassMethods
(lib 디렉토리/속편/플러그인/schema.rb)에 정의 모델에 당신이 plugin :schema
를 호출 할 때 포함하고 있습니다.
http://sequel.rubyforge.org/rdoc-plugins/classes/Sequel/Plugins/Schema/ClassMethods.html#M000110
http://sequel.rubyforge.org/rdoc/classes/Sequel/Model.html#M000130
질문의 예는 불완전하며 데이터베이스에 대한 연결이 설정이 있고 plugin :schema
이 모델에서 호출하지 않으면 작동하지 않습니다.
irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "sequel"
=> true
irb(main):003:0>
irb(main):004:0* # connect to an in-memory database
irb(main):005:0* DB = Sequel.sqlite
=> #<Sequel::SQLite::Database: "sqlite:/">
irb(main):006:0> class Task < Sequel::Model
irb(main):007:1> set_schema do
irb(main):008:2* primary_key :id
irb(main):009:2>
irb(main):010:2* varchar :title, :unique => true, :empty => false
irb(main):011:2> boolean :done, :default => false
irb(main):012:2> end
irb(main):013:1>
irb(main):014:1* create_table unless table_exists?
irb(main):015:1>
irb(main):016:1* if empty?
irb(main):017:2> create :title => 'Laundry'
irb(main):018:2> create :title => 'Wash dishes'
irb(main):019:2> end
irb(main):020:1> end
NoMethodError: undefined method `set_schema' for Task:Class
from (irb):7
irb(main):021:0> class Task < Sequel::Model
irb(main):022:1> plugin :schema
irb(main):023:1> set_schema do
irb(main):024:2* primary_key :id
irb(main):025:2>
irb(main):026:2* varchar :title, :unique => true, :empty => false
irb(main):027:2> boolean :done, :default => false
irb(main):028:2> end
irb(main):029:1>
irb(main):030:1* create_table unless table_exists?
irb(main):031:1>
irb(main):032:1* if empty?
irb(main):033:2> create :title => 'Laundry'
irb(main):034:2> create :title => 'Wash dishes'
irb(main):035:2> end
irb(main):036:1> end
=> #<Task @values={:title=>"Wash dishes", :done=>false, :id=>2}>
irb(main):037:0>
누가 플러그인을 호출하고 있습니까? 스키마? 수퍼 클래스? 내 예제 모델이 그것을 호출하지 않습니다 ... – TraderJoeChicago
@Sergio - 나는 당신의 모델에서'plugin : schema'를 호출해야하고, 예제가 불완전한 것으로 믿고 코딩 된 것으로 작동하지 않을 것이라고 생각합니다. 예제에이 행을 추가하면 Schema 플러그인의 메소드를 사용하여 모델을 확장하여 작동하게 할 수 있습니다. 위의 대답을 수정 한 irb 세션으로 편집했습니다. – samg
@Sergio - 예제가 그대로 작동하는 경우 다른 버전의 Sequel을 사용하고있을 가능성이 있습니다. 내 대답은 내가 생각하는 최신 3.6.0 버전을 말합니다 (이 글을 쓰는 시점에서.) – samg