看板 Ruby 關於我們 聯絡資訊
程式碼如下 class CreateMembers < ActiveRecord::Migration def self.up create_table :members do |t| t.column :mail , :string, :null => false t.column :chinese_name , :string, :null => false t.column :english_name , :string, :null => false t.column :mobile , :string t.column :role , :string t.column :location , :string t.column :last_login , :string, :default => Time.now t.column :is_valid , :enum, :limit => [:YES, :NO], :default => :YES t.column :creator_id , :string, :references => :members, :on_delete => :set_null, :on_update => :cascade t.timestamps end end def self.down drop_table :members end end 欄位 creator_id 是參考表格本身的 id 欄位 在套用Redhill的plugin後,可以產生如下的sql syntax CREATE TABLE `members` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `mail` varchar(255) NOT NULL, `chinese_name` varchar(255) NOT NULL, `english_name` varchar(255) NOT NULL, `mobile` varchar(255), `role` varchar(255), `location` varchar(255), `last_login` varchar(255) DEFAULT '2008-11-09 03:15:49', `is_valid` enum('YES','NO') DEFAULT 'YES', `creator_id` varchar(255), `created_at` datetime, `updated_at` datetime, FOREIGN KEY (creator_id) REFERENCES members (id) ON UPDATE CASCADE ON DELETE SET NULL) ENGINE=InnoDB 不過卻一直報出錯誤 #HY000Can't create table './kao_development/members.frm' (errno: 150) 在刪除foreign key這段敘述後就能正常建立表格 本來以為是sql syntax generation出了問題,不過查了一下教科書 看不出來無法建立table 的原因究竟在 FOREIGN KEY (creator_id) REFERENCES members (id) ON UPDATE CASCADE ON DELETE SET NULL的哪部份 語法看起來應該是正確無誤,還請板上高手指點迷津了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.10.5.203 ※ 編輯: huge 來自: 124.10.5.203 (11/09 03:27)
godfat:syntax != code. 你用哪版 AR? 直接執行 sql 看錯誤訊息 11/09 03:47
godfat:你這或許應該去 database 板問。看起來是 mysql 11/09 03:47
huge:AR版本是2.1.2,直接執行SQL所得到的錯誤訊息就是我寫的那項 11/09 03:58
huge:感謝不睡覺的godfat 0rz 11/09 03:58
godfat:..XD 可惜後來我關ptt了。我亂猜一下,你要 REFERENCES 的 11/09 14:47
godfat:table 在這行執行完前,還不存在,這樣可以嗎? 11/09 14:48
godfat:你先create然後再alter試試,mysql寫alter可以self-referenc 11/09 14:58