迁移

2011-02-23 199 views
1

嘿,我有一个小问题,我rake迁移

class CreateEvents < ActiveRecord::Migration 

    def self.up 
    create_table :events do |t| 
     t.integer :broadcast_id 
     t.integer :position 
     t.string :title 
     t.string :location 
     t.string :link 
     t.text :description 
     t.datetime :time 
    end 
    add_foreign_key :events, :broadcast_id, :broadcasts 
    end 

    def self.down 
    remove_foreign_key :events, :broadcast_id, :broadcasts 
    drop_table :events 
    end 

end 

问题=>add_foreign_key:事件:broadcast_id,:广播

$耙分贝:迁移

== CreateEvents: migrating =================================================== 
-- create_table(:events) 
-> 0.0021s 
-- add_index(:events, :broadcast_id) 
-> 0.0004s 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: near "FOREIGN": syntax error: ALTER TABLE "events" ADD FOREIGN KEY ("broadcast_id") REFERENCES "broadcasts"(id) 

回答

3

你为什么要这样定义外键?

如果你想要你的Events和​​之间的关系,那么你应该看看创建一个活动的记录关系。喜欢的东西

# Event model 
class Event < ActiveRecord::Base 
    belongs_to :broadcast 
end 

# Broadcast model 
class Broadcast < ActiveRecord::Base 
    has_many :events 
end 

这样,你让铁轨维护你的外键关系。查看活动记录关联上的Rails Guide以获取更多信息。

+0

此外,在sqlite中的外键支持是[更多涉及](http://www.justatheory.com/computers/databases/sqlite/foreign_key_triggers.html)。 – 2011-02-23 15:51:55

+0

感谢您的快速回复! 现在我已经看到,不是在我的模型中,它是一个完整的Rails代码! – imalik8088 2011-02-24 13:12:30

+0

@Dty,你的意思是“让rails为你保持外键关系。” ?我需要调用rails生成的迁移AddBroadcastToEvent引用:广播。我对吗 ? – 2011-07-28 21:08:25

1

截至3.6.19版本,SQLite的,又名默认的开发数据库,​​支持外键约束,但外键约束执法turned off by default(向后兼容),解决它:
建议选项

使用其他数据库如MySQL/PostgreSQL的在Rails的开发 数据库,下面是一个例子:

默认:&默认
适配器:mysql2
编码:UTF8
池:5
用户名:用户
密码:密码
插座:/tmp/mysql.sock

发展:
< <:*共享
数据库:db_development

其他选择离子包括

  1. 未来版本(4 *)的SQLite的有enabled foreign key constraints in default,但截至目前,它尚未公布。
  2. 我们还可以使通过下面的命令外键的支持:

    sqlite> PRAGMA foreign_keys = ON;
    sqlite> PRAGMA foreign_keys // should print 1

    但请注意:

    • 它不坚持,你必须做的每连接;
    • 如果PRAGMA foreign_keys没有打印,则表示您的SQLite版本不支持外键,请升级到3.6.19或更高版本;
  3. 有人说我们可以在连接字符串中启用它,但我没有在Rails中找到正确的字符串。你可以参考this answer