标签: phoenix-framework

管理多对多关联

说,我有Post模型属于很多标签:

defmodule MyApp.Post do
  use MyApp.Web, :model

  schema "tours" do
    field :title, :string
    field :description, :string
    has_many :tags, {"tags_posts", MyApp.Tag}
  end

  # …
end
Run Code Online (Sandbox Code Playgroud)

保存帖子时,我从多选字段中获取tags_ids列表,如下所示:

tags_ids[]=1&tags_ids[]=2
Run Code Online (Sandbox Code Playgroud)

问题是如何在凤凰城保存时将标签链接到帖子?

elixir phoenix-framework

12
推荐指数
2
解决办法
2591
查看次数

如何向Phoenix项目添加CSS/JS依赖项?

我正在尝试将jquery添加到Phoenix项目中.

当我在头标记的app.html.eex中链接到jquery,如下所示:

<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

...有用.

但是,我不想要Web依赖.我想在应用程序中使用jquery.

我已将jquery.min.js复制到web/static/js目录.并在app.html.eex中引用它,如下所示:

<script src="<%= static_path(@conn, "/js/jquery.min.js") %>"></script>
Run Code Online (Sandbox Code Playgroud)

它不起作用.

将jquery.min.js复制到app.js也不起作用.

有趣的是,当我直接在app.html.eex中将脚本标记放在JS之间时,它可以工作.

只有来自云的直接链接和/或将JS放在app.html.eex中的脚本标记之间才能正常工作?

更新:

早午餐正在将JS复制到priv目录中的app.js. 但是应用程序似乎无法访问它.

我究竟做错了什么.

jquery elixir brunch phoenix-framework

12
推荐指数
3
解决办法
7215
查看次数

Phoenix模板如果有条件的话

我从rails迁移,并希望这在我的模板中工作?

      <% if true do %>
        <li><p>hello</p></li>
      <% else %>
        <li><p>world</p></li>
      <% end %>
Run Code Online (Sandbox Code Playgroud)

似乎没有任何条件被渲染.如何实现这一目标?

谢谢

phoenix-framework

12
推荐指数
1
解决办法
7460
查看次数

Absinthe.Plug不可用

安装absinthe_plug后,我收到以下错误:

= Compilation error in file lib/kerrigan_api_web/router.ex ==
** (UndefinedFunctionError) function KerriganApiWeb.Absinthe.Plug.init/1 is undefined (module KerriganApiWeb.Absinthe.Plug is not available)
Run Code Online (Sandbox Code Playgroud)

这是我的代表

{:phoenix, "~> 1.3.0"},
  {:phoenix_pubsub, "~> 1.0"},
  {:phoenix_ecto, "~> 3.2"},
  {:postgrex, ">= 0.0.0"},
  {:phoenix_html, "~> 2.10"},
  {:phoenix_live_reload, "~> 1.0", only: :dev},
  {:gettext, "~> 0.11"},
  {:cowboy, "~> 1.0"},
  {:poison, "~> 3.1"},
  {:absinthe, "~> 1.3.0"},
  {:absinthe_plug, "~> 1.3.0"},
  {:absinthe_ecto, git: "https://github.com/absinthe-graphql/absinthe_ecto.git"},
  {:faker, "~> 0.7"},
Run Code Online (Sandbox Code Playgroud)

据我所知,我不需要添加任何其他东西.我按照这里的简单步骤:

absinthe_slug

编辑:我的路由器

defmodule KerriganApiWeb.Router do
  use KerriganApiWeb, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

12
推荐指数
1
解决办法
1987
查看次数

docker run 加载共享库 libstdc++.so.6 和 libgcc_s.so.1 时出错

我正在尝试使用 docker 运行部署,并且使用以下命令成功运行:

\n

docker build -t romenigld/blog-prod .

\n

但是当我尝试使用这个命令时:

\n

docker run --env-file .env -p 8080:4000 romenigld/blog-prod

\n

我收到此错误:

\n
Error loading shared library libstdc++.so.6: No such file or directory (needed by /app/erts-12.0.2/bin/beam.smp)\nError loading shared library libgcc_s.so.1: No such file or directory (needed by /app/erts-12.0.2/bin/beam.smp)\nError relocating /app/erts-12.0.2/bin/beam.smp: __cxa_begin_catch: symbol not found\nError relocating /app/erts-12.0.2/bin/beam.smp: _ZSt24__throw_out_of_range_fmtPKcz: symbol not found\nError relocating /app/erts-12.0.2/bin/beam.smp: _Znwm: symbol not found\nError relocating /app/erts-12.0.2/bin/beam.smp: _ZSt20__throw_length_errorPKc: symbol not found\nError relocating /app/erts-12.0.2/bin/beam.smp: __cxa_guard_release: symbol not found\nError relocating /app/erts-12.0.2/bin/beam.smp: _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm: …
Run Code Online (Sandbox Code Playgroud)

elixir docker phoenix-framework docker-compose alpine-linux

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

以编程方式预加载has_many,通过:在Elixir Ecto中

我正在尝试以编程方式将预加载附加到我的某个具有has_many, through:关系的模型的查询中.

我的模块:

defmodule MyApp.Chemical do
  use MyApp.Web, :model

  schema "chemicals" do
    has_many :company_chemicals, MyApp.CompanyChemical
    has_many :companies, through: [:company_chemicals, :companies]

    field :name, :string
  end

  def with_companies(query) do
          from  chem      in query,
     left_join: comp_chem in assoc(chem, :company_chemicals),
          join: company   in assoc(comp_chem, :company),
       preload: [companies: company]
  end

end

defmodule MyApp.Company do
  use MyApp.Web, :model

  schema "companies" do
    has_many :company_chemicals, MyApp.CompanyChemical
    has_many :chemicals, through: [:company_chemicals, :chemicals]

    field :name, :string
  end
end

defmodule MyApp.CompanyChemical do
  use MyApp.Web, :model

  schema "company_chemicals" do
    belongs_to …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

11
推荐指数
1
解决办法
4287
查看次数

如何在凤凰框架中连接两个标签?

在凤凰框架的视图中,在div元素内生成两个span元素的方法是什么?

phoenix-framework

11
推荐指数
1
解决办法
746
查看次数

为什么我得到#Ecto.Association.NotLoaded?

我有团队,每个团队都有用户,因此有一个连接表将用户链接到团队,因为它有多对多关系,这是我的模型:

defmodule App.Team do
  use App.Web, :model

  schema "teams" do
    field :owner_id, :integer
    has_many :team_users, {"team_user", App.TeamUser}
  end

end
defmodule App.User do
  use App.Web, :model

  schema "users" do
    # field :email, :string
    has_many :team_user, App.TeamUser
  end
end
Run Code Online (Sandbox Code Playgroud)

这是连接模型:

defmodule App.TeamUser do
  use App.Web, :model

  @primary_key false
  schema "team_user" do
    belongs_to :user, App.User
    belongs_to :team, App.Team
  end

end
Run Code Online (Sandbox Code Playgroud)

如果我运行查询以获得所有结果团队用户的用户的所有团队,如下所示:

teams_users =
      from(t in Team, where: t.owner_id == ^user_id)
      |> Repo.all()
      |> Repo.preload(:team_users)
Run Code Online (Sandbox Code Playgroud)

我得到这个日志:

[%App.Team{__meta__: #Ecto.Schema.Metadata<:loaded>, id: 1,
  is_base_team: true, owner_id: 3, …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

11
推荐指数
1
解决办法
9284
查看次数

使用Ecto(MySQL)进行upsert的最简单方法是什么?

在我的应用程序中执行upsert很常见,我想实现最简洁的方法来实现upsert.

  1. 我应该使用片段来实现本机sql upsert吗?
  2. 任何惯用的ecto方式做upsert?

mysql elixir ecto phoenix-framework

11
推荐指数
2
解决办法
6961
查看次数

如何在自定义混合任务中从Ecto获取数据

我想在自定义混合任务中通过Ecto显示来自我的数据库的数据.如何在我的任务中获得Ecto仓库(或启动它)?

我试过这样的东西,但它不起作用:

defmodule Mix.Tasks.Users.List do


use Mix.Task
  use Mix.Config
  use Ecto.Repo, otp_app: :app

  @shortdoc "List active users"
  @moduledoc """
    List active users
  """
  def run(_) do
    import Ecto.Query, only: [from: 1]

    Mix.shell.info "=== Active users ==="
    query = from u in "users"
    sync = all(query)
    Enum.each(users, fn(s) -> IO.puts(u.name) end)
  end

end
Run Code Online (Sandbox Code Playgroud)

当我启动mix users.list时,这会给我以下输出:

** (ArgumentError) repo Mix.Tasks.Users.List is not started, please ensure it is part of your supervision tree
    lib/ecto/query/planner.ex:64: Ecto.Query.Planner.query_lookup/5
    lib/ecto/query/planner.ex:48: Ecto.Query.Planner.query_with_cache/6
    lib/ecto/repo/queryable.ex:119: Ecto.Repo.Queryable.execute/5
Run Code Online (Sandbox Code Playgroud)

有什么想法或其他方法来解决这个问题?

elixir-mix elixir phoenix-framework

11
推荐指数
2
解决办法
2194
查看次数