【发布时间】:2012-01-13 13:51:35
【问题描述】:
我需要将两个模型与一个简单的 has_many 相关联。问题是我不想使用 id (_id) 作为关联的主键。我仍然希望模型继续对其他所有内容使用默认的 ObjectId。
(这是在 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_ids 是我调用以发送消息的 API 返回的唯一 id。稍后在另一方的回调中收到相同的 id。
我可以只进行查询并将其粘贴到从消息中查找“关联”报告的方法中,反之亦然……如果可能的话,我宁愿让它们成为实际的关联。
我可以强制报告接收过程搜索并匹配关联的对象...但是当它有点多余并且与它无关时,我宁愿不把这个责任放在那里除了验证和保存这些数据。
简而言之:我更喜欢关联:)
【问题讨论】:
-
+1 积极处理反对意见 :-)
-
呵呵,我之前在网上问过;)
-
@MartinWestin 你解决了吗?我有完全相同的问题
-
不,我最终作弊了,添加了一个代理方法,其关联名称确实返回了该模型的自定义位置(实际上是一个 Criteria 对象,但是...)。
-
在 mongoid project.o 上做一些功能请求
标签: ruby-on-rails mongoid