我是学习Ruby on Rails和其他一切的新手。我想知道Rails是否有一种神奇的方式来实现它:
表1
User table:
id, user_name, fake_id, user_fake_name
表2
Post table:
id, fake_or_real, auth_id
fake_or_real是一个布尔值; auth_id是user_id或user_fake_id的外键。
如果fake_or_real == 1,则auth_id = user_fake_id; auth_name = user_fake_name
如果fake_or_real == 0,则auth_id = user_id; auth_name = user_name
我使用两个id的原因是因为我想在用户在帖子中使用假名时隐藏html代码中的user_id。如果没有必要,请告诉我。
我应该怎么做才能获得可加入的作品,并使post.auth_name在这两种情况下都有效?
感谢。
答案 0 :(得分:1)
据我所知,没有办法在其中一个字段上使用外键(并且它是db限制*)。你能做的是
让User
有一个FakeUser
,将大部分属性委托给User
(ID和名称除外)
Post
应该有一个polimorphic关联,让我们称之为authorable
,其中另一边可能是User
或FakeUser
。瞧!
有关多态关联的更多信息http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
*限制在这里不是一个好词,它是不可能实现的。