2016-08-25 11 views
0

device.rb力のユニークなフィールド

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

end 

いくつかのデータを埋め込まれた文書を節約しながら、私はそれにidフィールドで私にJSONを与える外部サーバーから取得します。私が応答で挿入しようとすると、idフィールドが繰り返し取得され、mongoは_idをいくつかのデータ用にjson配列と一緒に来るIDと同じにする。

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を考慮する。したがって、新しいResponseオブジェクトにidを割り当てることをスキップする必要があります。 id属性を自分自身に割り当てることは決してお勧めできません。あなたはこのようにすることができます。

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

本当に@device_date[:id]値を保存したい場合は、Responsedevice_idようなモデルまたは任意の名前にいくつかの新しいフィールドを追加する必要があり、あなたはそれにそのIDを格納することができます。

+0

回答ありがとうございます。 埋め込みドキュメントでユニークなインデックスを作成できますか? @device_data [:id]を一意に保ちたいのです。どうやってするか? – ashusvirus

+0

私には分かりません。しかし、あなたは 'Response'クラスにバリデーションを追加して* id *の重複したエントリを防ぐことができます。すなわち、' validates_uniqueness_of:whatever_name_you_chose_for_id_field' –

関連する問題