2016-07-08 8 views
1

Ich habe vor kurzem auf die neuesten Versionen von Phoenix und Ecto migriert.Undefined Methode Cast nach Update auf Ecto 2.0

Jetzt habe ich Code eines Modells geändert, nach ecto Changelog

defmodule Spaces.Tag do 
    use Spaces.Web, :model 
#Changed to below 
defmodule Spaces.Tag do 
    use Ecto.Schema 

Ich erhalte (CompileError) web/models/tag.ex:23: undefined function cast/4. Alles, was ich bin fehlt?

Mein mix.exs entsprechenden Code

defp deps do 
    [{:phoenix, "~> 1.2"}, 
    {:postgrex, ">= 0.0.0"}, 
    {:phoenix_ecto, "~> 3.0"}, 
    {:phoenix_html, "~> 2.6"}, 
    {:phoenix_live_reload, "~> 1.0", only: :dev}, 
    {:gettext, "~> 0.9"}, 
    {:cowboy, "~> 1.0"}, 
    {:httpoison, "~> 0.8.0"}, 
    {:jsx, "~> 2.8"}, 
    {:scrivener_ecto, "~> 1.0"}, 
    {:phoenix_html_simplified_helpers, "~> 0.4.0"}, 
    {:ex_doc, "~> 0.12.0", only: [:dev]} 
    ] 
    end 

Antwort

3

Sie müssen auch bestimmte Module importieren:

import Ecto 
    import Ecto.Changeset # This is the one that includes cast 
    import Ecto.Query 

Dieses 1.1 in Ecto geändert wurde und in http://www.phoenixframework.org/blog/upgrading-from-v10-to-v11#section-ecto-changes

Sie shouldn‘genannt t müssen tun:

defmodule Spaces.Tag do 
    use Spaces.Web, :model 
#Changed to below 
defmodule Spaces.Tag do 
    use Ecto.Schema 

Stattdessen sollten Sie aktualisieren web.ex zu:

defmodule Spaces.Web do 
    def model do 
    quote do 
     use Ecto.Schema 

     import Ecto 
     import Ecto.Changeset 
     import Ecto.Query 
    end 
    end 
end 
+0

Ich lehnte die Bearbeitung hier, bitte beachten Sie, das ist die 'Modell 'Funktion innerhalb' MyApp.Web', die definiert wird. – Gazler

+0

Sollte mein gesamter Code innerhalb des def-Modells sein? Ich bekomme jetzt ein undefiniertes Funktionsschema. Gibt es ein Tutorial, das diese ganze Sache abdeckt? – coderVishal

+0

Sie müssen noch verwenden 'spaces.Web verwenden,: Modell 'innerhalb von' Spaces.Tag' Das Tutorial ist die Upgrade-Anleitung, die ich oben verlinkt. – Gazler