他們在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>
誰在調用plugin:schema?超類?我的示例模型沒有調用它... – TraderJoeChicago 2009-11-25 07:21:06
@Sergio - 我相信你需要在你的模型中調用'plugin:schema',並且你的示例是不完整的,不會像編碼一樣工作。通過將Schema插件的方法擴展爲模型,將此行添加到您的示例中可以使其工作。 我已經編輯我的上述答案與irb會議演示這一點。 – samg 2009-11-25 16:11:29
@Sergio - 如果你的例子確實如此,你可能會使用不同版本的續集。我的答案指的是我認爲是最新版本的3.6.0版本(撰寫本文時)。 – samg 2009-11-25 16:14:37