作者huge (huge)
看板Ruby
標題[問題] ActiveRecord與ForeignKey
時間Sun Nov 9 03:24:44 2008
程式碼如下
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)
1F:推 godfat:syntax != code. 你用哪版 AR? 直接執行 sql 看錯誤訊息 11/09 03:47
2F:→ godfat:你這或許應該去 database 板問。看起來是 mysql 11/09 03:47
3F:→ huge:AR版本是2.1.2,直接執行SQL所得到的錯誤訊息就是我寫的那項 11/09 03:58
4F:→ huge:感謝不睡覺的godfat 0rz 11/09 03:58
5F:→ godfat:..XD 可惜後來我關ptt了。我亂猜一下,你要 REFERENCES 的 11/09 14:47
6F:→ godfat:table 在這行執行完前,還不存在,這樣可以嗎? 11/09 14:48
7F:→ godfat:你先create然後再alter試試,mysql寫alter可以self-referenc 11/09 14:58