作者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