2015-10-05 2 views
16

arbeiten Ich habe dieses Problem mit Ecto-Projekt. Keine der Abfragen funktioniert. Ich habe ein bisschen googeln und github Probleme suchen. Es gibt wenige, aber nichts mit meinem Problem zu tun.Ecto Modell `undefined Funktion:` wenn mit Makro *** in iex ***

Diese Frage wurde von diesem einem https://github.com/elixir-lang/ecto/issues/602#issuecomment-145596702 (meist im Zusammenhang mit meinem Problem) gekickt

query = from u in Univer, where: u.id > 4, select: u 

mit ** (RuntimeError) undefined function: u/0 sprengt. Nicht nur dieses Modell, sondern auch andere Modelle. Meine Deps.

{:postgrex, "~> 0.9.1"}, 
    {:poison, "~> 1.5"}, 
    {:httpoison, "~> 0.7.2"}, 
    {:ecto, "~> 1.0.4"}, 
    {:floki, "~> 0.5"} 

Momentan erfolgt das Lesen von db nur über psql. Es macht den Job aber nervig. :)

Für die Referenz.

defmodule Univer do 
    use Ecto.Model 

    import Ecto.Query 

    schema "univers" do 
     field :ref, :integer 
     field :name, :string 
     field :legal_name, :string 
     field :city, :string 
     field :type, :string 
     field :address, :string 
     field :contacts, {:array, :string} 
     field :fax, :string 
     field :phones, {:array, :string} 
     field :email, :string 
     field :url, :string 
     has_many :schools, School 
     has_one :place, Place 
     timestamps 
    end 
    end 

und die Migration

defmodule Univer.Repo.Migrations.AddUniversTable do 
    use Ecto.Migration 

    def up do 
     create table(:univers) do 
     add :ref, :integer 
     add :name, :text 
     add :legal_name, :text 
     add :type, :string 
     add :fax, :string 
     add :city, :string 
     add :contacts, {:array, :string} 
     add :address, :text 
     add :phones, {:array, :string} 
     add :email, :string 
     add :url, :string 
     timestamps 
     end 
    end 

    def down do 
     drop table(:univers) 
    end 
    end 

Antwort

26

finde ich den Kern des Problems ist meine Erwartung der klassischen Sprache Magie in funktionaler Sprache.

Im Detail:

Wenn Sie Abfragen in IEX-Konsole testen (iex -S mix). Sie müssen schließen

import Ecto.Query 

ich es im Modul einschließlich wurde aber nicht in IEX-Konsole. Es ist ziemlich dumm, aber es lohnt sich zu teilen, nehme ich an.

+4

Es ist definitiv eine gemeinsame Falle! –

+0

Gibt es eine einfache Möglichkeit, einige Dinge vorab zu laden? – brightball

+5

@aramisbear Sie können eine '.iex.exs'-Datei im Stammverzeichnis Ihres Projekts hinzufügen, die' import Ecto.Query' enthält. Es wird dann diesen Befehl ausführen, wenn Sie IEX öffnen. –

Verwandte Themen