说,我有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)
问题是如何在凤凰城保存时将标签链接到帖子?
我正在尝试将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. 但是应用程序似乎无法访问它.
我究竟做错了什么.
我从rails迁移,并希望这在我的模板中工作?
<% if true do %>
<li><p>hello</p></li>
<% else %>
<li><p>world</p></li>
<% end %>
Run Code Online (Sandbox Code Playgroud)
似乎没有任何条件被渲染.如何实现这一目标?
谢谢
安装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)
据我所知,我不需要添加任何其他东西.我按照这里的简单步骤:
编辑:我的路由器
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) 我正在尝试使用 docker 运行部署,并且使用以下命令成功运行:
\ndocker build -t romenigld/blog-prod .
但是当我尝试使用这个命令时:
\ndocker run --env-file .env -p 8080:4000 romenigld/blog-prod
我收到此错误:
\nError 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) 我正在尝试以编程方式将预加载附加到我的某个具有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) 我有团队,每个团队都有用户,因此有一个连接表将用户链接到团队,因为它有多对多关系,这是我的模型:
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) 在我的应用程序中执行upsert很常见,我想实现最简洁的方法来实现upsert.
我想在自定义混合任务中通过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)
有什么想法或其他方法来解决这个问题?