外键取决于布尔值

时间:2013-07-01 04:55:46

标签: ruby-on-rails foreign-keys foreign-key-relationship jointable

我是学习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在这两种情况下都有效?

感谢。

1 个答案:

答案 0 :(得分:1)

据我所知,没有办法在其中一个字段上使用外键(并且它是db限制*)。你能做的是

User有一个FakeUser,将大部分属性委托给User(ID和名称除外) Post应该有一个polimorphic关联,让我们称之为authorable,其中另一边可能是UserFakeUser。瞧!

有关多态关联的更多信息http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

*限制在这里不是一个好词,它是不可能实现的。