有什么好方法可以映射和减少长生不老药的列表并将其转换为新列表。
要求: 1. 找到具有相同id 的地图: 2. 合并“role”键的值(即收集所有唯一值)。3. 对于所有其他映射(列表元素),不执行任何操作。
list = [%{"id": 1, "role": ["A", "B"]}, %{"id": 2, "role": ["B", "C"]}, %{"id": 1, "role": ["C", "A"]} ]
Run Code Online (Sandbox Code Playgroud)
需要在以下列表中进行转换:
ans_list = [%{"id": 1, "role": ["A", "B", "C"]}, %{"id": 2, "role": ["B", "C"]}]
Run Code Online (Sandbox Code Playgroud) 如何更改此代码以连接到不需要身份验证的通道,同时仍然允许在某些通道上进行身份验证?
phoenix.js:701 WebSocket 连接到“ws://localhost:4000/socket/websocket?token=&vsn=1.0.0”失败:WebSocket 握手期间出错:意外的响应代码:403
用户套接字.ex
defmodule App.UserSocket do
use Phoenix.Socket
## Channels
channel "collection:*", App.CollectionChannel
## Transports
transport :websocket, Phoenix.Transports.WebSocket
# transport :longpoll, Phoenix.Transports.LongPoll
# Socket params are passed from the client and can
# be used to verify and authenticate a user. After
# verification, you can put default assigns into
# the socket that will be set for all channels, ie
#
# {:ok, assign(socket, :user_id, verified_user_id)}
#
# To deny connection, return `:error`.
#
# See …Run Code Online (Sandbox Code Playgroud) 我目前正在开发用 Elixir 编写的 phx / phoenix API。我使用 React.js 创建了一个 API 前端。但是,我在浏览器的 JS 控制台中收到以下错误消息。
我已经使用 Postman 成功创建了一个用户,所以我 99% 确定错误不是与 phx 项目有关,而是与 React 项目有关。
我的前端和后端都托管在 github 上。.env需要在 React 项目的根目录中创建一个文件,其中包含以下行:
REACT_APP_API_URL=http://localhost:4000/api
Run Code Online (Sandbox Code Playgroud)
并正在按照以下教程进行工作。
任何和所有的帮助将不胜感激。
让我们看一下基本的路由器:
...
scope "/", Backend do
pipe_through [:browser, :with_session]
get "/", PageController, :index
end
...
Run Code Online (Sandbox Code Playgroud)
调用http://localhost:4000/login会引发默认的“Phoenix.Router.NoRouteError”。处理这种情况的最佳方法是什么?离开默认的 Phoenix 错误页面?重定向到索引页?未找到重定向到自定义页面?
如何将任何未知路由重定向到单个路径?
Rails 的schema.rb是获取数据库状态参考的一种非常方便的方法。我可以直接进入 pg 或 mysql 客户端并描述表以获得相同的信息,但它不太方便。
Elixir / Ecto 是否有类似的功能或方式来生成模式表示?
我正在尝试查询属于我的系统中特定用户的所有联赛。
数据设置如下所示:
has_many :users_leagues, Statcasters.UsersLeagues
has_many :leagues, through: [:users_leagues, :league]
Run Code Online (Sandbox Code Playgroud)
所以你可以看到,我有一个 has_many through 关联用户和联赛。
我正在尝试获取用户附加的所有联赛的列表。
在 Rails 中,它看起来像这样:user.leagues它将加载所有附加了当前用户 ID 的联赛。
我如何使用 Ecto、Elixir 和 Phoenix 做到这一点?
调用函数时,如果找不到所需的数据,我想重试该函数。我想在函数失败后 10 秒后重试。
def check_question do
case question = Repo.get_by(Question, active: true, closed: false) do
question when not(is_nil(question)) ->
case ActiveQuestion.ready_for_answer_status(question) do
n when n in ["complete", "closed"] ->
question
|> Question.changeset(%{ready_for_answer: true, closed: true})
|> Repo.update()
end
_ ->
Process.send_after(Servers.Retry, :update, 10_000)
end
end
Run Code Online (Sandbox Code Playgroud)
defmodule Servers.Retry do
use GenServer
require IEx
def start_link do
GenServer.start_link(__MODULE__, %{})
end
def init(state) do
{:ok, state}
end
def handle_info(:update, state) do
Scheduler.check_question()
{:noreply, state}
end
end
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,如果不满足 case 语句,我将尝试重试该函数。但这并不完全有效。
在使用 Guardian 验证针对 JWT 令牌的 GET 请求后,我尝试使用 JSON 进行响应。
我的测试:
describe "Show user if authenticated" do
setup %{conn: conn} do
{:ok, %User{} = user} = Riders.create_user(@create_attrs)
{:ok, jwt, claims} = Bikefit.Guardian.encode_and_sign(user)
IO.inspect claims
conn = put_req_header(conn, "authorization", "Bearer #{jwt}")
{:ok, conn: conn, user: user}
end
test "and return user if token is valid", %{conn: conn, user: user} do
email = user.email
conn = get conn, current_user_path(conn, :current)
response = json_response(conn, 200)
IO.puts "---------- test response--------"
IO.inspect response
assert %{"email" => …Run Code Online (Sandbox Code Playgroud) 我运行这样的查询:
query = from q in MY.Model, preload: [:accoc], where: q.accoc_field in [10, 11]
Repo.all(query)
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
** (Ecto.QueryError) iex:32: field `accoc_field` in `where` does not exist in schema MY.Model in query:
Run Code Online (Sandbox Code Playgroud)
所以,基本上我正在尝试编写一个查询,例如:
select * from my_model m join assoc a on m.assoc_id = a.id where a.assoc_field in (10, 11)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 Ecto 中的联接来编写上述查询,但是在使用预加载时如何做到这一点?
我正在尝试使用仅附加语义查询 Ecto 表,因此我想要给定 ID 的完整行的最新版本。这里描述了该技术,但简而言之:我想使用一个获取 ID 的最新时间的子查询来连接一个表本身。在 SQL 中,这看起来像:
SELECT r.*
FROM rules AS r
JOIN (
SELECT id, MAX(inserted_at) AS inserted_at FROM rules GROUP BY id
) AS recent_rules
ON (
recent_rules.id = r.id
AND recent_rules.inserted_at = r.inserted_at)
Run Code Online (Sandbox Code Playgroud)
我在 Ecto 中很难表达这一点。我尝试过这样的事情:
maxes =
from(m in Rule,
select: {m.id, max(m.inserted_at)},
group_by: m.id)
from(r in Rule,
join: m in ^maxes, on: r.id == m.id and r.inserted_at == m.inserted_at)
Run Code Online (Sandbox Code Playgroud)
但尝试运行它时,我遇到了限制:
连接中的查询只能有
where查询中的条件
建议maxes一定只是一种SELECT _ FROM …