Модель экто `undefined function:` при работе с макросом *** в iex ***

У меня проблема с проектом Ecto. Ни один из запросов не работает. Я немного погуглил и поискал проблемы с github. Их немного, но они не связаны с моей проблемой.

Этот вопрос был задан с этого https://github.com/elixir-lang/ecto/issues/602#issuecomment-145596702 (в основном связано с моей проблемой)

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

Взрывается с ** (RuntimeError) undefined function: u/0. Не только эта модель, но и другие модели. Мои депс.

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

В настоящее время все чтение из базы данных осуществляется через psql. Это делает свою работу, но раздражает. :)

Для справки.

  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

и миграция

  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

person Andrew Shatnyy    schedule 05.10.2015    source источник


Ответы (1)


Я обнаружил, что суть проблемы - это мое ожидание магии классического языка в функциональном языке.

В деталях:

Если вы хотите протестировать запросы в консоли IEX (iex -S mix). Вы должны включить

import Ecto.Query

Я включал его в модуль, но не в консоль IEX. Это довольно глупо, но, полагаю, стоит поделиться.

person Andrew Shatnyy    schedule 05.10.2015
comment
Это определенно распространенная ошибка! - person José Valim; 05.10.2015
comment
Есть ли простой способ предварительно загрузить такие вещи? - person brightball; 31.05.2016
comment
@aramisbear Вы можете добавить .iex.exs файл в корень вашего проекта, содержащий import Ecto.Query. Затем он выполнит эту команду, когда вы откроете IEX. - person Henrik N; 24.06.2016