[問題] ActiveRecord與ForeignKey

看板Ruby作者 (huge)時間16年前 (2008/11/09 03:24), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/2 (看更多)
程式碼如下 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)

11/09 03:47, , 1F
syntax != code. 你用哪版 AR? 直接執行 sql 看錯誤訊息
11/09 03:47, 1F

11/09 03:47, , 2F
你這或許應該去 database 板問。看起來是 mysql
11/09 03:47, 2F

11/09 03:58, , 3F
AR版本是2.1.2,直接執行SQL所得到的錯誤訊息就是我寫的那項
11/09 03:58, 3F

11/09 03:58, , 4F
感謝不睡覺的godfat 0rz
11/09 03:58, 4F

11/09 14:47, , 5F
..XD 可惜後來我關ptt了。我亂猜一下,你要 REFERENCES 的
11/09 14:47, 5F

11/09 14:48, , 6F
table 在這行執行完前,還不存在,這樣可以嗎?
11/09 14:48, 6F

11/09 14:58, , 7F
你先create然後再alter試試,mysql寫alter可以self-referenc
11/09 14:58, 7F
文章代碼(AID): #195UTzgz (Ruby)
討論串 (同標題文章)
文章代碼(AID): #195UTzgz (Ruby)