2012-01-13 101 views
6

我需要將兩個模型與簡單的has_many關聯。問題是我不想使用id(_id)作爲關聯的主鍵。我仍然希望模型繼續使用默認的ObjectIds來處理其他事情。Mongoid Association的自定義鍵

(這是在Rails3.1 + Mongoid運行)

所以基本上我想:

class Message 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message_reports, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 
class MessageReport 
    ... 
    field :message_id, :default => proc { "fail-#{Time.now.to_f.to_s}" } 
    ... 
    has_many :message, primary_key: :message_id, foreign_key: :message_id 
    ... 
end 

這隻會ActiveRecord的工作。 Mongoid不支持primary_key選項。

那麼如何獲得Mongoid集合的相同結果呢?

你之前說:別這樣......

的原因,我真的真的需要琦在這一領域,而不是正確的ID是,這些消息......而message_ID進行唯一的id我通過API調用發送消息返回。之後在另一側的回調中收到相同的ID。

我可以只是做查詢,並將其粘貼在一個方法中,從消息中查找「關聯」報告,反之亦然......如果可能,我寧願讓它們成爲實際關聯。

我可以強制報告接收過程搜索並匹配關聯的對象......但我寧願不把責任放在那裏,因爲它是多餘的,它沒有其他任何事情要做除了驗證和保存這些數據外。

簡而言之:我寧可關聯:)

+0

+1主動反對工作:-) – 2012-01-13 13:55:55

+0

嘿嘿,我在網上問過之前;) – 2012-01-13 15:27:36

+0

@MartinWestin你解決了嗎?我有完全相同的問題 – jbnunn 2012-02-29 23:09:59

回答

1

此功能不會對Mongoid甚至在主存在實際上,它不是在Mongoid 3.0

計劃做一些功能要求。如果這是一個好主意,Mongoid社區真的願意添加一些新功能。對我來說這是個好主意。