我有2个模型 - 用户和ApiKey(用户has_many api_keys),我正在尝试创建条件连接.我的意思是我想用他的活跃ApiKeys加载单个查询用户.我目前的代码看起来像
query = from u in User,
join: a in assoc(u, :api_keys),
where: u.email == ^email,
preload: [api_keys: a]
user = Repo.one(query)
Repo.preload user, api_keys: (from a in ApiKey, where: a.is_active == true)
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我发现 - 预加载方法无法在数据已预加载时更改api_keys的集合.
你能告诉我一个很好的例子吗 - 如何预加载"活跃的"api_keys?
我正在做一个ecto查询,我正在尝试分组q.created_date.此查询成功执行GROUP BY,但它在第二次执行.我试图按月分组.
MYQUERY |> group_by([q], [q.created_date, q.id])
Run Code Online (Sandbox Code Playgroud)
是否有类似的东西:
MYQUERY |> group_by([q], [month(q.created_date), q.id])
Run Code Online (Sandbox Code Playgroud) 我正在尝试删除一个项目及其所有子项:
where(ParentModel, [x], x.user_id == 123)
|> first
|> Repo.delete()
# or
# Repo.delete(where(ParentModel, [x], x.user_id == 123))
Run Code Online (Sandbox Code Playgroud)
两者都抛出异常:
function Ecto.Query.__changeset__/0 is undefined or private
Run Code Online (Sandbox Code Playgroud)
它与验证有什么关系?
在父模型中,我有 on_delete: :delete_all
试图让我的第一个Phoenix应用程序连接到Compose的Cloud Hosted Postgres DB并且无法连接.我已经确认它已启动并正在运行.我收到以下错误:
[error] GenServer #PID<0.178.0> terminating
** (DBConnection.ConnectionError) tcp connect (postgres://*****@aws-us-east-1-portal.5.dblayer.com:16786/compose:5432): non-existing domain - :nx
domain
(db_connection) lib/db_connection/connection.ex:148: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
** (Mix) The database for HelloPhoenix.Repo couldn't be created: an exception was raised:
** (DBConnection.ConnectionError) tcp connect (postgres://****@aws-us-east-1-portal.5.dblayer.com:16786/compose:5432): non-existing domain -
:nxdomain
(db_connection) lib/db_connection/connection.ex:148: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Run Code Online (Sandbox Code Playgroud)
这些是我的依赖:
defp deps do
[{:phoenix, "~> 1.2.1"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.0"},
{:postgrex, ">= 0.0.0"},
{:phoenix_html, …Run Code Online (Sandbox Code Playgroud) 我有一个名为内容的文本字段,需要显示其摘录。
做这个的最好方式是什么?
就像是:
<% post.content.slice(0..50) %>
Run Code Online (Sandbox Code Playgroud)
我的想法是 但是,这给了我一个参数错误。
显示内容文本字段的前50个字符的最佳方法是什么?
或者-在将数据创建/保存到数据库后是否可以创建摘录字段?
任何帮助表示赞赏。提前致谢。
我来自铁轨背景(像许多Elixir人一样).我目前的问题是我正在尝试查询特定记录.对于我来说,这对我来说毫无疑问,但我似乎无法在凤凰城找到它.这是我正在尝试做的事情:
我有一个Locationhas_many表,MonitorsMonitor有一个不是ID的数字.这些号码只对一个位置是唯一的,所以我不能简单地找到只有监视器编号的特定监视器.所以我必须将它范围扩展到它所属的位置.在Rails中我会做这样的事情:
location = Location.find(params[:location_id])
monitor = location.monitors.find_by(number: params[:monitor_number])
Run Code Online (Sandbox Code Playgroud)
使用Rails活动记录很容易,但我怎样才能与凤凰城一起做?这是我目前的尝试没有按照我的预期运作.
monitor_query = from m in Monitor,
where: m.location_id == ^upload_params["location_id"],
where: m.number == ^upload_params["monitor_number"],
select: m.id
monitor = Repo.all(monitor_query)
Run Code Online (Sandbox Code Playgroud)
这是错误的ID,我不确定它在做什么.任何人都可以告诉我这个吗?
我正在使用ecto 2.2.6.
我正试着通过ecto离开加入.
首先,我使用List来返回带有单个表的选择值.(1)
接下来,由于表连接,我使用Map返回选择值.(2)
Repo.all(from m in "members",
left_join: g in "groups",
on: g.id == m.group_id,
where: g.id == ^group_id
# select: [:id, :group_id, :name, :group_name] #(1)
# select: {m.id, m.group_id, m.name, g.group_name} #(2)
)
Run Code Online (Sandbox Code Playgroud)
我想用HTML制作选择框.它不起作用,因为我使用Map时没有键.
<%= select f, :group_id, Enum.map(@groups, &{&1.group_name, &1.group_id}) %>
Run Code Online (Sandbox Code Playgroud)
我该如何选择并使用选择值?我想知道如何通过ecto返回选择值,并通常在选择框中重新显示.
我在Elixir和Phoenix测试时遇到了另一个问题.我有一个代表用户的模块,如下所示:
defmodule AppExample.Accounts.User do
use Ecto.Schema
import Ecto.Changeset
alias SecuritytrailsApi.Accounts.User
schema "users" do
field :email, :string
field :password, :string, virtual: true
field :password_hash, :string
field :last_login, :naive_datetime
timestamps()
end
...
def registration_changeset(%User{} = user, attrs \\ %{}) do
user
|> changeset(attrs) # validating and castnig email
|> validate_required([:password])
|> put_password_hash # creates password hash from password
|> set_default_date
end
defp set_default_date(chanegset) do
case changeset do
%Ecto.Changeset{valid?: true} ->
put_change(changeset, :last_login, Ecto.DateTime.utc)
_ -> changeset
end
end
end
Run Code Online (Sandbox Code Playgroud)
让我们说我有一个帐户上下文,负责创建新帐户.像这样: …
我正在尝试将has_many关联预加载到传入的结构和传递的结构关联的has_many关联.
以下是我现在正在使用的内容:
project =
Repo.get!(Project, id)
|> Repo.preload([rows: {query, [images: from i in Image, order_by: i.index]}])
Run Code Online (Sandbox Code Playgroud)
但是这会返回此错误:
This error may happen when you forget a comma in a list or other container:
[a, b c, d]
Elixir cannot compile otherwise. Syntax error before: ','
Run Code Online (Sandbox Code Playgroud)
这虽然工作得很好:
project =
Repo.get!(Project, id)
|> Repo.preload([rows: {query, [:images]}])
Run Code Online (Sandbox Code Playgroud)
但在这个查询中,我无法按照我想要的图像进行排序.任何人都可以帮我吗?
我想创建一个包含3个字段的unique_constraint,并将其称为“ unique_user_product_shop”。当我这样做时,我的数据库抛出一个错误,表明尝试的插入不是唯一的:
错误:
18:04:18.830 [error] #PID<0.380.0> running Api.Router terminated
Server: 192.168.1.12:4000 (http)
Request: PUT /product/isinshop/?p_id=12&s_id=12&u_id=792200324272726
** (exit) an exception was raised:
** (FunctionClauseError) no function clause matching in Ecto.Changeset.add_constraint/6
(ecto) lib/ecto/changeset.ex:2272: Ecto.Changeset.add_constraint(#Ecto.Changeset<action: nil, changes: %{p_id: 12, s_id: 12, u_id: "792200324272726", voted_in_shop: true, voted_not_in_shop: false}, errors: [], data: #Api.UserProductShop<>, valid?: true>, :unique, "unique_user_product_shop", :exact, [:p_id, :u_id, :s_id], {"has already been taken", []})
(api) lib/api/models/user_product_shop.ex:37: Api.UserProductShop.insert_user_product_shop/2
(api) lib/api/controllers/product/put_product_is_in_shop.ex:48: Api.Controllers.PutProductIsInShop.put_product_is_in_shop/1
(api) lib/api/router.ex:1: Api.Router.plug_builder_call/2
(api) lib/plug/debugger.ex:123: Api.Router.call/2
(plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) /Users/Ben/Development/Projects/vepo/api/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
Run Code Online (Sandbox Code Playgroud)
我的代码: …