2016-08-25 3 views
0

device.rbсила уникальных полей при сохранении встроенные документы

class Device 
    include Mongoid::Document 
    field :devui, type: String 
    field :name, type: String 
    belongs_to :user 
    embeds_many :responses 

end 

некоторые данные, я принесу с внешнего сервера, который дает мне JSON с поля ид в нем. Который когда я пытаюсь вставить в ответ, поле id повторяется, а mongo принимает _id так же, как id, который приходит с json-массивом для некоторых данных.

devices_controller.rb

def fetch 
     @device_data = "some data" 
     @responses = @device.responses.new(@device_data) 
     @device.save 
     redirect_to @device 
     end 

responses.rb

class Response 
    include Mongoid::Document 
    field :dataFrame, type: String 
    embedded_in :device 
end 

ответ

0

Да, mongoid считает id и _id так же в случае, если документы. Таким образом, вы должны пропустить присвоение id новому объекту Response. Не рекомендуется назначать атрибут id самостоятельно. Вы можете сделать это так.

@responses = @device.responses.new(@device_data.except(:id)) 

Если вы действительно хотите сохранить @device_date[:id] значения, вы должны добавить новое поле в Response модели как device_id или любой другое имя, и вы можете сохранить этот идентификатор в нем.

+0

Благодарим вас за ответ. Могу ли я создать уникальный индекс во встроенных документах. как я хочу сохранить @device_data [: id] уникальным. как это сделать? – ashusvirus

+0

Что я не уверен. Но вы можете добавить проверку в класс 'Response', чтобы предотвратить дублирование записей для * id * i.e.' validates_uniqueness_of: whatever_name_you_chose_for_id_field' –

Смежные вопросы