[問題] ActiveRecord與ForeignKey
程式碼如下
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
11/09 03:47, 1F
→
11/09 03:47, , 2F
11/09 03:47, 2F
→
11/09 03:58, , 3F
11/09 03:58, 3F
→
11/09 03:58, , 4F
11/09 03:58, 4F
→
11/09 14:47, , 5F
11/09 14:47, 5F
→
11/09 14:48, , 6F
11/09 14:48, 6F
→
11/09 14:58, , 7F
11/09 14:58, 7F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章