2017-04-21 10 views
0

は、私はので、私は従うフェニックスの埋め込みスキーマの処理方法は?

{のようなJSON形式を私はデータベースとしてのmongo DBを使用しています従う

schema "address" do 
    field :line1, :string 
    field :country, :string 
end 

よう

schema "users" do 
    field :user_name, :string 
    field :password, :string 
end 

addressモデルに従うようuserモデルを望んでいるとしましょう_id: "dfd"、user_name: "$$$$"、パスワード: "xxx"、住所:{line1: "line1"、国: "india"}}

1)userのモデムと国のユーザー名がaddressモデルの必須フィールドであるチェンジセットの作成と検証の方法1) 2)両方を検証した後に最終的なチェンジセットを取得する方法?

答えて

1

モンゴアダプタが列jsonb PostgreSQLのと同様に働くと仮定:

defmodule User do 
    use Ecto.Schema 
    import Ecto.Changeset 

    schema "users" do 
    field :user_name, :string 
    field :password, :string 
    embeds_one :address, Address 
    end 

    def changeset(model, params \\ %{}) do 
    model 
    |> cast(params, [:user_name, :password] 
    |> cast_embed(:address) 
    |> validate_required(:user_name, :password, :address) 
    end 
end 

defmodule Address do 
    use Ecto.Schema 
    import Ecto.Changeset 

    @primary_key false 
    embedded_schema do 
    field :line1, :string 
    field :country, :string 
    end 

    def changeset(model, params \\ %{}) do 
    model 
    |> cast(params, [:line1, :country]) 
    |> validate_required([:line1, :country]) 
    end 
end 
+0

'changeset.changes'が続く'%{user_nameのようになります: "ハリ"、パスワード: "****"、住所:# Ecto.Changeset 、valid ?: true>} 'しかし、私が'Etto.Changesetに対して実装されていないEnumerable

+0

'addess'チェンジセットを構造体を挿入する前に: cs = User.changeset(%User {}、params) アドレス= apply_changes(get_change(CS:アドレス)) CS = put_change(CS:アドレス、住所) –

+0

は '埋め込みアドレス文書の_id'も' { \t "_id" 作成:のObjectId( "58fda5c9421aa915beeb6ff4" )、 \t "アドレス":{ \t \t "国": "testcountry"、 \t \t "_id":のObjectId( "58fda5c9421aa915beeb6ff3")、 \t \t "LINE1": "testline1" \t}、 \t "user_name": "check"、 \t "パスワード": "******" } '私は間違いがありますか? –

関連する問題