我刚刚开始使用Elixir并且已经使用了很多iexshell.我可以将"会话"保存/记录到文件中吗?
谢谢.
我正在阅读github上的一些代码elixir代码,我看到|>经常使用.它不会出现在文档站点的操作列表中.这是什么意思?
即
expires_at: std["expires_in"] |> expires_at,
Run Code Online (Sandbox Code Playgroud) 几天前,我开始使用Elixir和Phoenix Framework(v 0.12.0)和Postgres数据库.我正在尝试创建一个具有UUID主键的表,我更喜欢顺序默认值.
在使用mix phoenix.gen.html生成模型和迁移文件并遵循Phoenix文档中的其他步骤之后,我已经更改了
def model do
quote do
use Ecto.Model
end
end
Run Code Online (Sandbox Code Playgroud)
在web.ex以
def model do
quote do
use Ecto.Model
@primary_key {:id, :uuid, []}
@foreign_key_type :uuid
end
end
Run Code Online (Sandbox Code Playgroud)
正如Ecto文档中提到的那样.我也将迁移更改为
create table(:tblname, primary_key: false) do
add :id, :uuid, primary_key: true
[other columns]
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试从自动生成的表单向表中添加一个条目时,我收到一个错误,因为它id是null.如果我手动将id-column 添加到模型中,则会收到列已存在的错误.如果我忽略设置primary_key为false table/2并删除id列,则使用顺序id列生成表.
我是否需要id在变更集中手动设置,或者在设置我的应用程序以使用UUID时出错?提前致谢
从URL下载文件/图像的代码在Elixir中是什么样的?
谷歌搜索似乎带回了如何下载Elixir本身.
双方try/rescue并try/catch在花好月圆错误处置技术.根据引言指南中的相应章节.
可以使用
try/rescue构造来挽救错误
另一方面,
throw和catch被保留用于它在哪里不可能的,除非通过使用检索的值的情况throw和catch.
我rescue对错误有一个简短的了解.虽然catch是任何价值.
然而,
throw和catch' ?, 否则无法检索值的情况尝试更新(或创建)记录时,我收到无效的CSRF令牌错误.我正在使用Elixir v1.0.3,Erlang/OTP 17 [erts-6.3]和Phoenix v0.8.0(我想,我不知道如何查看Phoenix的版本).我正在创建一个Web应用程序,主要遵循Phoenix指南和Elixir Dose Jobsite示例资源.但是,当我尝试从html表单发布信息时,我收到无效的CSRF令牌错误.根据错误中给出的建议,我将'x-csrf-token':csrf_token添加到操作中.
edit.html.eex:
<h2>Edit Directory</h2>
<form class="form-horizontal" action="<%= directory_path @conn, :update, @directory.id, 'x-csrf-token': @csrf_token %>" method="post">
<div class="form-group">
<label for="directory" class="col-sm-2 control-label">Directory</label>
<div class="col-sm-10">
<input type="hidden" name="_method" value="PATCH">
<input type="text" class="form-control" value="<%= @directory.directory %>" name="directory" placeholder="Directory" required="required">
</div>
</div>
...
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
[error] #PID<0.579.0> running Ainur.Endpoint terminated
Server: localhost:4000 (http)
Request: POST /config/directories/2?x-csrf-token=
** (exit) an exception was raised:
** (Plug.CSRFProtection.InvalidCSRFTokenError) Invalid CSRF (Cross Site Forgery Protection) token. Make sure that all your non-HEAD and non-GET …Run Code Online (Sandbox Code Playgroud) 我创建了我的第一个Elixir- Phoenix应用程序.我已经写了一些我想在多个控制器中使用的插件,现在有很多代码重复,因为插件代码在我的所有控制器中重复.
我的问题是,是否有一个文件,我可以把所有的插头,然后访问并使用不同的控制器?
# somefile to define my plugs
defp load_subject(conn, _) do
subject = Subject |> Repo.get conn.params["subject_id"]
assign(conn, :subject, subject)
end
defp load_topic(conn, _) do
topic = Topic |> Repo.get conn.params["topic_id"]
conn |> assign :topic, topic
end
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中使用它们:
# First Controller
defmodule MyApp.FirstController do
use MyApp.Web, :controller
plug :load_subject
plug :load_topic
plug :action
def some_action(conn, _) do
# do something
end
def another_action(conn, _) do
# do some other thing
end
end …Run Code Online (Sandbox Code Playgroud) 我的web/templates文件夹中有两个模板文件夹:
> ls web/templates
personal_info user
Run Code Online (Sandbox Code Playgroud)
我想要的是user在另一个视图中从文件夹渲染一些模板personal_info.所以我在路径上有一个文件:web/templates/personal_info/index.html.eex,我有以下内容:
<%= render "user/xyz.html" %>
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:
[error] #PID<0.821.0> running MyApp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
** (Phoenix.Template.UndefinedError) Could not render "user/xyz.html" for MyApp.PersonalInfoView, please define a matching clause for render/1 or define a template at "web/templates/personal_info". The following templates were compiled:
* index.html
Run Code Online (Sandbox Code Playgroud)
请告诉我如何渲染在其他文件夹中定义的模板,我尝试了几个排列,但没有一个工作.
如何在Elixir中迭代地图的键值对?
这不起作用:
my_map = %{a: 1, b: 2, c: 3}
Enum.each my_map, fn %{k => v} ->
IO.puts "#{k} --> #{v}"
end
Run Code Online (Sandbox Code Playgroud) 从文档中我了解=~运算符如何匹配正则表达式,但我不明白这个运算符的一般用法.
例如,什么"foo" =~ "foo"意思?它有什么不同"foo" == "foo"?