假设我们正在制作一个博客。通常,模型看起来像这样:
class User
has_many :posts
end
class Post
belongs_to :user
end
他们的模式如下:
User
id
Post
id
user_id
但是现在,用户可以通过Facebook / Twitter /等登录,我们希望帖子不属于User对象,而是属于提供者和的组合提供者的uid 。
新架构如下所示:
User
id
provider
uid
Post
id
user_provider
user_uid
而且我不确定这些模型会是什么样子:
class User
has_many :posts, :foreign_key => ['user_provider', 'user_uid'] # Is this right??
end
class Post
belongs_to :user, :class_name => User # Again, this is a guess...
end
我是否在正确的轨道上? Rails的做法是什么?
答案 0 :(得分:1)
答案 1 :(得分:0)
你能详细说明你为什么要这样做吗?
这是标准的Rails实践,主键是一个名为“id”的整数,因此外键跟着它。
然而,没有什么可以阻止你创建复合索引并确保复合唯一性。
在Post模型上,您可以写:
validate_uniqueness_of :uid, :scope => :provider
或使用较新的Rails 3语法:
validates :uid, :uniqueness => {:scope => :provider}
您可以为迁移添加复合索引:
add_index :posts, [:uid, :provider]
或使用唯一索引强制数据库级别的唯一性:
add_index :posts, [:uid, :provider], :unique => true