Мне нужно связать две модели с простым has_many.Проблема в том, что я не хочу использовать идентификатор (_id) в качестве первичного ключа для ассоциации.Я все еще хочу, чтобы модель продолжала использовать ObjectIds по умолчанию для всего остального.
(Это работает на 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?
Прежде чем вы скажете: не делайте этого ...
Причина, по которой мне действительно нужно указывать это поле, а не правильный идентификатор, заключается в том, что это сообщения ... а message_ids - это уникальные идентификаторы, возвращаемые API, который я вызываю для отправки сообщения.Позже тот же идентификатор получен в обратных вызовах с другой стороны.
Я мог бы просто делать запросы и вставлять его в метод, чтобы найти «связанные» отчеты из сообщения и наоборот ... Я бы предпочелесли бы они были фактическими ассоциациями, если это возможно.
Я мог бы заставить процесс получения отчетов искать и сопоставлять объекты для ассоциации ... но я бы не стал возлагать эту ответственность там, когда она естьотчасти излишне, и это не имеет ничего общего с этими данными, кроме проверки и сохранения.
Короче: я бы предпочел ассоциацию:)