2016-07-24 12 views
2

エラー「無効です」。 銀行のフォームを作成しました。通貨が含まれています。エクトのチェンジと多くの協会への多くは、私は多くの</strong>協会には多くの<strong>とスキーマ<strong>銀行</strong>と<strong>通貨</strong>を持って

bank.ex

schema "banks" do 
    field :name, :string 
    many_to_many :currencies, App.Currency, join_through: "banks_currencies" 
end 

@required_fields ~w(name) 
@optional_fields ~w() 

def changeset(model, params \\ %{}) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> cast_assoc(:currencies) 
end 

form.html.ex

<%= multiple_select(form, :currencies, @currencies) %> 

問題がある:私は選択したいくつかの通貨でフォームを送信すると、その後、リターンをチェンジセットエラー "無効です"。私はそれが正解であるわからないんだけど、それは

銀行を働き、最近1.1.4から1.2

答えて

1

にアップグレードし、

iex(8)> App.Bank.changeset bank, %{"currencies" => ["1"]} 
#Ecto.Changeset<action: nil, changes: %{}, 
errors: [currencies: {"is invalid", [type: {:array, :map}]}], 
data: #App.Bank<>, valid?: false> 

私は、最新のフェニックスがインストールされている:私は、IEXにすることをシミュレート.EX

def changeset(model, params \\ %{}) do 

    currencies = Currency 
    |> Currency.by_ids(if params["currencies"], do: params["currencies"], else: []) 
    |> App.Repo.all 
    |> Enum.map(&Ecto.Changeset.change/1) 

    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> put_assoc(:currencies, currencies) 
end 

currency.ex

def by_ids(query, ids) do 
    from c in query, where: c.id in ^ids 
end 
関連する問題