2016-03-21 27 views
1

キャストエクト警告

警告するとき、私はこの警告を得る:鋳造キャスト/ 4で埋め込みが廃止されて、 を使用してください、私はモデルの組織

を持って

代わり

を/ 3をcast_embed

defmodule Bonsai.Organization do 
    use Bonsai.Web, :model 
    alias Bonsai.OrganizationSettings 

    schema "organizations" do 
    field :name, :string 
    field :currency, :string 
    field :tenant, :string 
    field :info, :map, default: %{} 
    embeds_one :settings, OrganizationSettings, on_replace: :delete 

    timestamps 
    end 

    @required_fields ~w(name currency tenant) 
    @optional_fields ~w(info settings) 

    @doc """ 
    """ 
    def changeset(model, params \\ %{}) do 
    cast(model, params, @required_fields, @optional_fields) 
    |> cast_embed(:settings) 
    |> put_embed(:settings, OrganizationSettings.changeset(%OrganizationSettings{}, params[:settings] || %{})) 
    |> change(%{info: params[:info] || %{}}) 
    end 

end 

そして、私の埋め込まれたモデルOrganizationSettings

defmodule Bonsai.OrganizationSettings do 
    use Ecto.Model 
    #use Ecto.Changeset 

    @primary_key {:id, :binary_id, autogenerate: true} 
    #schema "" do 
    embedded_schema do 
    field :show_search_on_focus, :boolean, default: true 
    field :theme, :string, default: "bonsai" 
    end 

    def changeset(model, params \\ %{}) do 
    model 
    |> cast(params, [:theme], [:show_search_on_focus]) 
    |> validate_inclusion(:theme, ["bonsai", "dark"]) 
    end 

end 

私は多くの方法を試してみましたが、私は

答えて

0

https://github.com/elixir-ecto/ecto/blob/cc92f05cb2f24c3206db9017e6c28ecf77ff100d/CHANGELOG.mdを参照してください助けてください何か間違ったことをやっている - 刷新チェンジを。

キャスト(モデル、パラメータ、@required_fields、@optional_fields) キャスト(モデル、パラメータ、[::テーマ]、[:show_search_on_focus])の代わりに

、使用あなたはここに廃止予定のキャスト/ 4を使用していますキャスト/ 3とvalidate_required/3の例で示したように。

+0

私はvalidate_requiredを使用しようとしましたが、Ecto 2でしか利用できませんでした。多分私は今ベータ版を使うべきです。 –

+0

助けてくれてありがとう、私はより完全な答えを作りましたが、あなたのガイドは本当に各ステップを解決するのに役立ちます –

0

`実行deps.updateを混合し、ファイル

# In file test/support/model_case.ex 
    setup tags do 
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Bonsai.Repo) 
    end 

# In file test/test_helper.exs 
#Ecto.Adapters.SQL.begin_test_transaction(Bonsai.Repo) 
Ecto.Adapters.SQL.Sandbox.mode(Bonsai.Repo, :manual) 

そして、私のモデル組織のチェンジセットを編集し、私はエクト2に更新しており、変更はその後
# mix.exs 
    defp deps do 
    [{:phoenix, "~> 1.1.4"}, 
    {:postgrex, ">= 0.0.0"}, 
    {:phoenix_ecto, "~> 3.0.0-beta"}, 
    {:phoenix_html, "~> 2.5"}, 
    {:phoenix_live_reload, "~> 1.0", only: :dev}, 
    {:gettext, "~> 0.9"}, 
    {:cowboy, "~> 1.0"}, 
    {:poison, "~> 1.5.2"}] 
    end 

です

def changeset(model, params \\ %{}) do 
    cast(model, params, [:name, :currency, :tenant]) 
    |> validate_required([:name, :currency, :tenant]) 
    |> cast_embed(:settings) 
    |> put_embed(:settings, OrganizationSettings.changeset(%OrganizationSettings{}, params[:settings] || %{})) 
    |> change(%{info: params[:info] || %{}}) 
    end