我有一个数据模型生成脚本,通过调用mysql命令行实用程序可以正常工作。我希望RoR使用这个包含表中几个外键依赖关系的数据模型。我发现$ rake db:schema:dump创建了db / schema.rb文件但确实如此,但它缺少所有外键约束/子句。这显然是个问题。
我已经在lynda.com上观看了RoR教程,并且foriegn密钥功能非常基本,并且假设有许多约定,例如只有一个外键,它需要有一个table1_table2_id的命名约定或者其他东西
我昨天在#rubyonrails频道的IRC上聊天,有一个人说RoR忽略了foriegn键和rake db:schema:dump似乎正在这样做。
例如,这是mysql语句:
CREATE TABLE IF NOT NOT EXISTS students
(
studentid
INT NOT NULL AUTO_INCREMENT,
teacherid
INT NOT NULL,
parentid
INT NULL,
firstname
VARCHAR(45)NOT NULL,
lastname
VARCHAR(45)NOT NULL,
dob
DATETIME非空,
isadult
TINYINT(1)NOT NULL,
email
VARCHAR(45)NOT NULL,
cellphone
INT NULL,
username
VARCHAR(45)NOT NULL,
password
VARCHAR(45)NOT NULL,
addr_streetno
VARCHAR(45)NULL,
addr_aptno
INT NULL,
addr_city
VARCHAR(45)NULL,
addr_state
VARCHAR(45)NULL,
addr_zip
INT NULL,
photo
MEDIUMBLOB NULL,
PRIMARY KEY(studentid
),
INDEX parentid_idx
(parentid
ASC),
INDEX teacherid_idx
(teacherid
ASC),
约束parentid
外键(parentid
)
参考parents
(parentid
)
无法删除操作
更新没有行动,
约束teacherid
外键(teacherid
)
参考teachers
(teacherid
)
无法删除操作
更新无动作)
ENGINE = InnoDB;
在schema.rb中,它显示为this,并且没有任何外键指令。是什么给了:
create_table "students", primary_key: "studentid", force: true do |t|
t.integer "teacherid", null: false
t.integer "parentid"
t.string "firstname", limit: 45, null: false
t.string "lastname", limit: 45, null: false
t.datetime "dob", null: false
t.boolean "isadult", null: false
t.string "email", limit: 45, null: false
t.integer "cellphone"
t.string "username", limit: 45, null: false
t.string "password", limit: 45, null: false
t.string "addr_streetno", limit: 45
t.integer "addr_aptno"
t.string "addr_city", limit: 45
t.string "addr_state", limit: 45
t.integer "addr_zip"
t.binary "photo", limit: 16777215
end
add_index "students", ["parentid"], name: "parentid_idx", using: :btree
add_index "students", ["teacherid"], name: "teacherid_idx", using: :btree
答案 0 :(得分:-1)
foreign key
的位置取决于模型的关联。
我们假设您有以下两种模式:
class Parent < ActiveRecord::Base
has_many :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
外键将放在声明belongs_to
关联的表中。在这种情况下,children
表。
外键是带有后缀parent model
的{{1}}的名称。在这种情况下,它将是_id
。
在Rails中,您可以将parent_id
添加到parent_id
:
children_table
然后运行rails g migration AddParentIdToChild parent_id:integer
。之后,外键应显示在rake db:migrate
我希望我没有误解你的问题 有关外键和表的更多信息,请参阅documentation