标签: ecto

Ecto模型`未定义函数:`在iex***中使用宏***时

我在Ecto项目中遇到了这个问题.没有任何查询正在运行.我做了一些谷歌搜索和github问题搜索.有几个但与我的问题无关.

这个问题是从这个问题开始的https://github.com/elixir-lang/ecto/issues/602#issuecomment-145596702(主要与我的问题有关)

 query = from u in Univer, where: u.id > 4, select: u
Run Code Online (Sandbox Code Playgroud)

爆发了** (RuntimeError) undefined function: u/0.不仅是那个型号,还有其他型号.我的朋友.

  {:postgrex, "~> 0.9.1"},
  {:poison, "~> 1.5"},
  {:httpoison, "~> 0.7.2"},
  {:ecto, "~> 1.0.4"},
  {:floki, "~> 0.5"}
Run Code Online (Sandbox Code Playgroud)

目前所有从db读取都是通过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, …
Run Code Online (Sandbox Code Playgroud)

elixir ecto

16
推荐指数
1
解决办法
2970
查看次数

Ecto中的数据类型 - "类型字符变化的值太长(255)"

ERROR 22001(string_data_right_truncation):类型字符变化的值太长(255)

我理解(并假设)字符串将限制为一定数量的字符; 但是,我不确定哪种类型最适合这种情况.

我应该使用什么类型的凤凰框架博客的"内容"部分?

数据将是文本段落,不能限制大小.

提前致谢.

elixir ecto phoenix-framework

16
推荐指数
1
解决办法
5870
查看次数

默认情况下预加载Ecto关联

有没有办法预先加载ecto关联而不显式使用preload:?

类似于架构中的选项?

schema "gadgets" do
  field :foo,
  has_many :bars, Myapp.Bar, preload: true
end
Run Code Online (Sandbox Code Playgroud)

我正在做类似的事情

Repo.get(Gadget, id)
  |> Repo.preload: [:bars]
Run Code Online (Sandbox Code Playgroud)

编辑:我试图这样做的原因是因为我想将相关模型预加载到已经预加载的相关模型,如

 preload: [:invoices preload: :items] 
Run Code Online (Sandbox Code Playgroud)

elixir ecto

15
推荐指数
1
解决办法
8351
查看次数

如何清理使用Phoenix/Ecto创建的PostgreSQL数据库

我开始玩Ecto试图理解它.正如预期的那样,我搞砸了(使用用户模型),我在运行迁移时遇到错误:

(Postgrex.Error) ERROR (duplicate_table): relation "users" already exists
Run Code Online (Sandbox Code Playgroud)

现在,我想使用shell/PgAdmin III清理数据库,以便我可以修复我的模型并再次运行迁移.我已经设置了PgAdmin,但我无法看到任何"用户"表...这样做的最佳方式是什么(使用Ecto,PostgreSQL shell还是PgAdmin)?

postgresql ecto phoenix-framework

15
推荐指数
1
解决办法
5094
查看次数

Elixir map check如果不为空且密钥存在

我试图找出一种方法来检查凤凰应用程序(使用Elixir)中的params散列是否具有特定的密钥.

在模型中的以下变更集功能中,参数默认为:空.

def changeset(model, params \\ :empty) do
Run Code Online (Sandbox Code Playgroud)

我需要弄清楚哈希中是否存在名为:username的密钥.

elixir ecto phoenix-framework

15
推荐指数
2
解决办法
1万
查看次数

为自引用Ecto模型构建JSON映射

我有一个Ecto模型:

defmodule Project.Category do
  use Project.Web, :model

  schema "categories" do
    field :name, :string
    field :list_order, :integer
    field :parent_id, :integer
    belongs_to :menu, Project.Menu
    has_many :subcategories, Project.Category, foreign_key: :parent_id
    timestamps
  end

  @required_fields ~w(name list_order)
  @optional_fields ~w(menu_id parent_id)

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
Run Code Online (Sandbox Code Playgroud)

如您所见,Category模型可以通过子类别atom引用自身.

以下是与此模型关联的视图:

defmodule Project.CategoryView do
  use Project.Web, :view

  def render("show.json", %{category: category}) do
    json = %{
      id: category.id,
      name: category.name,
      list_order: category.list_order
      parent_id: category.parent_id
    }
    if is_list(category.subcategories) do
      children = render_many(category.subcategories, Project.CategoryView, …
Run Code Online (Sandbox Code Playgroud)

json elixir ecto phoenix-framework

14
推荐指数
1
解决办法
1472
查看次数

在凤凰城处理嵌套表格/外部变更集的正确方法是什么?

我正在凤凰城编写一个简单的CRUD应用程序,管理员在创建新组织时可以使用初始员工帐户进行配置.

有效地,组织和用户之间的关系是多对多的.

我想出了以下内容:

  1. 用户架构:

    defmodule MyApp.User do
    use MyApp.Web, :model
    
    schema "users" do
      field :name, :string
      field :email, :string
      field :password, :string, virtual: true
      field :password_hash, :string
    end
    
    def changeset(...) # validate email, password confirmation etc.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 组织架构:

    defmodule MyApp.Org do
      use MyApp.Web, :model
    
      schema "orgs" do
        field :official_name, :string
        field :common_name, :string
    
        has_many :org_staff_users, MyApp.OrgStaffUser
        has_many :users, through: [:org_staff_users, :user]
     end
    
     def changeset(model, params \\ :empty) do
      model
      |> cast(params, ~w(official_name common_name), [])
     end
    
     def provisioning_changeset(model, params \\ :empty) do …
    Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

14
推荐指数
1
解决办法
3409
查看次数

如何使用Ecto使用Postgres的枚举类型

使用PostgreSQL,我们可以这样做:

CREATE TYPE order_status AS ENUM ('placed','shipping','delivered')
Run Code Online (Sandbox Code Playgroud)

Ecto的官方文档来看,没有本地类型可以映射Postgres的枚举类型.此模块为枚举结构提供自定义类型,但它映射到数据库中的整数.我可以轻松地使用该库,但我更喜欢使用数据库附带的本机枚举类型.

Ecto还提供了一种创建自定义类型的方法,但据我所知,自定义类型必须映射到本机Ecto类型...

任何人都知道这是否可以在Ecto的架构中完成?如果是,迁移将如何运作?

postgresql enums elixir ecto

14
推荐指数
6
解决办法
4991
查看次数

Elixir Ecto:如何在变更集中设置belongs_to关联

我有点陷入如何实际设置与变更集的关联.我在我的模型中有这个代码:

defmodule MyApp.MemberApplication do
  use MyApp.Web, :model
  use Ecto.Schema
  use Arc.Ecto.Schema

  alias MyApp.Repo
  alias MyApp.MemberApplication

  schema "applications" do
    field :name, :string
    field :email, :string
    field :time_accepted, Ecto.DateTime
    field :time_declined, Ecto.DateTime
    belongs_to :accepted_by, MyApp.Admin
    belongs_to :declined_by, MyApp.Admin

    timestamps()
  end

  def set_accepted_changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:time_accepted, :accepted_by_id])
    |> cast_assoc(params, :accepted_by)
    |> set_time_accepted
  end

  defp set_time_accepted(changeset) do
    datetime = :calendar.universal_time() |> Ecto.DateTime.from_erl
    put_change(changeset, :time_accepted, datetime)
  end
end
Run Code Online (Sandbox Code Playgroud)

我想保存一个关联Admin执行某个操作(接受或拒绝member_application)和时间戳.时间戳的生成有效,但是当我尝试保存关联时,我总是得到错误

** (FunctionClauseError) no function clause matching in Ecto.Changeset.cast_assoc/3
Run Code Online (Sandbox Code Playgroud)

这就是我想要设置关联的方式: …

elixir ecto

14
推荐指数
1
解决办法
5662
查看次数

Ecto/Elixir,我如何按日期查询?

我正在处理我的应用程序的统计页面,并尝试按日期查询数据.

为了获得日期范围,我使用 Calendar.Date

date_range = Date.days_after_until(start_date, end_date, true)
|> Enum.to_list
Run Code Online (Sandbox Code Playgroud)

它返回日期的日期列表,每个日期看起来像"2017-04-07".因此,根据我的日期date_range,我尝试查询,但它会触发如下错误.

where cannot be cast to type Ecto.DateTime in query: from o in Myapp.Order, where: o.created_date >= ^~D[2017-04-07]

对于created_date秩序领域,我做了这样的领域, field :created_date, Ecto.DateTime.

如果我想按日期查询,我该如何查询?

预先感谢.

datetime elixir ecto

14
推荐指数
1
解决办法
5557
查看次数

标签 统计

ecto ×10

elixir ×9

phoenix-framework ×5

postgresql ×2

datetime ×1

enums ×1

json ×1