0

我是學習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的外鍵。

if fake_or_real == 1,那麼auth_id = user_fake_id; auth_name = user_fake_name

if fake_or_real == 0,則auth_id = user_id; auth_name = user_name

我使用兩個id的原因是因爲我想隱藏user_id在html代碼中,當用戶在帖子中使用虛假名稱時。請讓我知道如果這不是必要的。

我應該怎麼做才能使連接工作,並使post.auth_name在這兩種情況下工作?

謝謝。

回答

1

據我所知,沒有辦法在其中一個字段上使用外鍵(並且它是db限制*)。你可以做的是

讓一個User有一個單一的FakeUser這代表大多數屬性來User(除ID和名稱),然後 一個Post應該有一個polimorphic協會,姑且稱之爲authorable在另一側的可能是UserFakeUser。瞧!

更多關於多態關聯http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

*限制不是一個好詞在這裏,這將是不可能實現的。

+0

謝謝。多態性關聯看起來像一個很棒的功能。我會深入研究它。 –