我有一个表需要引用另一个表的字段当做外键,想问下要怎样做?只需要添加 belongs_to 跟 has_one 就行了吗?
#3 楼 @413472212 模型层的 belongs_to 只添加了模型层的关联方法,不会在数据库层加外键关联。不过在 Rails 社区习惯不依赖数据库而只做模型层关联。如果认为应用环境需要数据库层的关联校验,也可以加上数据库外键。
:foreign_key 参数只是用来设置关联字段和关联名称不一致时的情况。
#5 楼 @413472212 你得先放下以数据库为中心的建模思路。ActiveRecord 有一套惯例,例如 User 和 Book 模型,对应 users 表和 books 表。
# 表结构
# users(id, ...)
# books(id, user_id, ...)
class User
has_many :books
end
class Book
belongs_to :user
end
# 使用场景
user = User.new
book = Book.new
user.books << book
user.save
这样来完成数据保存。Rails 是先考虑模型层的建模,然后再根据模型层来准备数据库结构。可以看到因为在代码里面都是使用已有的数据对象来设置关联的,不会直接往数据库插入关联键的值。
foreign_key 参数是指如果 books 变成了 (id, author_id, ...) 这样的结构,而需要用 author_id 和 User 模型建立关联,就需要用
class User
has_many :books, :foreign_key => :author_id
end
class Book
belongs_to :user, :class_name => 'User', :foreign_key => :author_id
end
更多资料参考官方引导 http://guides.rubyonrails.org/association_basics.html