关于编写Elixir函数,有一件事一直困扰着我,那就是我是否应该过滤或规范化我的函数。这背后的原因是因为Elixir倾向于将的“输入”和的“输入”区别对待,一个是位字符串,另一个是字符列表
过滤和规范化所有输入是更好,还是说您发送了一个字符列表而不是预期的位字符串就让它出错?大多数Elixir库只处理位字符串(双引号),并要求您在使用库之前手动转换字符列表(单引号)
然而,这完全取决于您的用例。例如,如果我要编写一个将另一个erlang库的输出作为输入的库,那么如果每次使用该库时都必须转换字符表
我想检查给定的URL是否有效,理想的情况是URL是否也能解析
首先,我如何检查字符串的有效性(即regex)
第二,有没有一种方法可以让我知道URL是否真的解析为internet上的资源
谢谢我将使用URI包对URI进行文本验证,然后检查主机名是否通过:inet.gethostbyname:
iex(1)> URI.parse("http://google.com/")
%URI{authority: "google.com", fragment: nil, host: "google.c
标签: Elixir
phoenix-frameworkecto
Phoenix框架中处理关联和嵌套表单的方法是什么?如何创建具有嵌套属性的表单?在控制器和模型中如何处理它 这里有一个处理1-1情况的简单示例
假设我们有一辆汽车和一台发动机车型,显然汽车有一台发动机。所以这是汽车模型的代码
defmodule MyApp.Car do
use MyApp.Web, :model
schema "cars" do
field :name, :string
has_one :engine, MyApp.Engin
标签: Elixir
phoenix-frameworkecto
我有一个文件表,还有许多其他表可以创建一对一的关联,例如用户可能有化身,帖子可能有照片
可能的解决办法
一种可能的解决方案是创建users\u文件和posts\u文件表格,并使用has\u one:to。然而,这看起来有些过分
理想溶液
理想的解决方案是定义这样的表
users
- avatar_id
posts
- photo_id
schema "users" do
has_one :avatar, MyApp.FileDb, with: :avatar_
假设我有这个模板sample.html.eex:
<div class="<%= @class %>" id="<%= @id %>">
<a href="home.html" class="<%= @class_a"></a>
</div>
2) 我的组件视图中有一个函数:
def class_a (conn) do
class+id
end
然后,模板可以访问class_a。
我的问题是如
我正在尝试创建一个表单,它只有一个文本字段和一个隐藏字段,我将在向HTTP API传递数据时使用这些字段,因此我没有与之关联的模型,而且扩展而言,没有变更集
可以这样做并使用form\u来创建表单吗?您可以使用传递Plug.Conn作为第一个参数
来自(特别是“连接数据”部分):
form_for/4需要实现Phoenix.HTML.FormData协议的任何数据结构作为第一个参数,允许我们仅基于连接信息创建表单
这在创建没有任何类型模型数据支持的表单(如搜索表单)时非常有用
%>
谢谢!今天早
我正在使用库读取一个csv文件,该文件返回一个行流:
File.stream!("some_file.csv")
|> CSV.decode # returns a stream of rows
第一行通常是csv标题,所以我认为拆分标题和正文会很酷:
def split_header_and_body(row_stream) do
header = row_stream |> Stream.take(1) |> Enum.to_list |> List.firs
背景:
我有一个串行到以太网适配器,它正在接收状态更新(报警面板),并通过家庭网络上的IP/端口使这些更新可用。每个数据包都是整个消息的一部分,协议是二进制的
问题:
如何将各个数据包和二进制数据组合到一个可以匹配模式的缓冲区中。我感兴趣的数据与其他我不感兴趣的数据混合在一起。没有真正的分隔符,但是我感兴趣的消息总是以0x01 0x06开头,然后消息是固定长度的(其他消息是可变长度的)
我知道如何连接到IP/端口并接收数据,每次一个字节,但我一直在研究如何收集数据并对数据进行滑动窗口匹配,直到找
我在探索长生不老药,发现了一些关于它的奇怪之处。我们使用它来匹配任何变量并丢弃它,因为Elixir认为它是永久未绑定的:
iex(38)> _
** (CompileError) iex:38: unbound variable _
但是,当我将某个值赋给下划线时,该值会以与普通变量绑定相同的方式得到回显:
iex(38)> x = 10
10
iex(39)> _ = 10
10
在第二种情况下,shell回音10是什么意思?10是表达式\uuu10的结果
Elixir中
标签: Elixir
phoenix-frameworkecto
一个组织有许多用户
schema "organizations" do
field :name, :string
has_many :users, TestApp.User
end
一个用户有许多下属
schema "users" do
field :name, :string
belongs_to :organization, TestApp.Organization
belongs_to :manager, TestApp.User,
foreign_key:
在本书中,作者使用了一些测试数据:
def test_data do
[
[1366225622, 26, 15, 0.125],
[1366225622, 27, 15, 0.45],
[1366225622, 28, 21, 0.25],
[1366229222, 26, 19, 0.081],
[1366229222, 27, 17, 0.468],
[1366229222, 28, 15, 0.60],
[13
请看以下代码:
current_user = Plug.Conn.get_session(conn, :current_user)
unless current_user == nil do
Logger.info "User #{current_user.id} logged out"
end
这个代码很有效,但我觉得它不像长生不老药。来自C,我习惯了这样的事情:
if ((current_user = get_session("current_user"
如何将应用程序配置为仅在特定环境中的运行时加载?
我知道我只能为测试环境配置依赖项。
是否有办法将mix.exs中的应用程序配置为仅在测试环境中加载?
例如:
def application do
[mod: {MyApp, []},
applications: [:phoenix]] end
defp deps do
[{:phoenix, "~> 1.2.1"}] end
我可以只为测试环境配置phoenix应用程序吗 正如@JustinWoo
标签: Elixir
phoenix-frameworkecto
我想在变更集中验证一个配置映射。配置有多个键,每个键都有一些约束
当接收到数据时,我可以为它们中的每一个运行一个验证器,但这迫使我编写大量可以更智能地完成的代码,因此我正在运行一个循环并尝试收集所有失败的验证,而不是逐个运行
defp validate_config_flags(changeset) do
config = get_field(changeset, :config)
for {k, v} <- config do
if !Map.has
标签: Elixir
phoenix-frameworkecto
这是一个如此基本的问题,以至于我无法在网上找到细节
我有一个名为“Radios”的模型,我希望显示添加到主页上的最后一个收音机-templates/page/index.html.eex
到目前为止,我所拥有的:
radio.ex
page_controller.ex
页面模板
我假设我应该在page controller而不是radio controller中编写查询
所有这些都会导致以下控制台错误:
== Compilation error on file web/controllers/
我有一个关键字列表:[key1:“value”,key2:“value2”,key3:“value3”]
我想将其转换为字符串:“key1:value1&key2:value2&key3:value3”
我想使用Enum.reduce,但是函数的参数是什么?既然您想在映射值之后在值之间添加分隔符,我建议使用Enum.map\u join/3:
iex(1)> list = [key1: "value", key2: "value2", key3: "value3"]
[key1: "val
发件人:
如果采用给定行为的模块未实现该行为所需的回调之一,将生成编译时警告
Elixir是快速失败方法的有力倡导者。我对这个矛盾感到困惑
当一个模块没有实现一个或多个行为回调时,为什么Elixir会产生编译时警告而不是编译时错误?可能是回调使用较少。该行为仍然可以在没有回调的情况下实现,这可能就是原因。您的意思是模块仍然可以在部分实现行为的情况下运行吗?您可能还会问,为什么Erlang也将此视为警告。查看Erlang的流行行为,如gen\u server,您可能不需要所有回调(例如,您不需要h
标签: Elixir
phoenix-frameworkecto
在我的Phoenix应用程序中,当尝试使用嵌入多个关系更新模型时,我在exto.Changeset.change/2中遇到了一个无函数子句匹配错误。我读过文档,也看过其他关于这方面的帖子,但我不知道我做错了什么
首先,这里是错误:
** (FunctionClauseError) no function clause matching in Ecto.Changeset.change/2
(ecto) lib/ecto/changeset.ex:307: Ecto.Changeset.c
我是Elixir的新手,想知道是否有一种方法可以检查字符串是否是日期,而不必编写自己的使用正则表达式的函数 我想最适合你的选择可能是,但你可以提供约会的格式信息
如果您的格式比较复杂,恐怕需要使用您自己的“datetime助手”。我想最适合您的选项可能是,但您可以提供日期格式的信息
如果您的格式比较复杂,恐怕需要使用您自己的“datetime助手”。这取决于解析字符串中日期的格式Elixir的标准库包含以下内容:
def is_date?(date) do
case Date.from_is
标签: Elixir
phoenix-frameworkecto
我试图在我的应用程序中找到一个联盟中有多少支球队。我似乎找不到这个问题的答案。以下是我们的“我的模型”:
联盟
队
我想知道一个联赛有多少队。如果这是Rails,我会做这个League.first.teams.count。我怎样才能用长生不老药、凤凰和外星人做到这一点
我是一个外星生物,但这是我的第一次尝试,但没有成功
def league_limit(league) do
count = from l in league,
left_join: t in assoc(l
我试图找出elixir OTP进程和普通操作系统进程之间的区别,比如说Linux。谁能帮我照一下吗?即使经过研究,我仍然感到困惑。操作系统进程和OTP进程只共享名称。它们是完全不同的东西。这是误导,但事实就是这样
来自,位于Elixir的主页(从主页单击1次):
Elixir的流程不应与操作系统流程混淆。Elixir中的进程在内存和CPU方面非常轻量级(与许多其他编程语言中的线程不同)。因此,同时运行数十个甚至数十万个进程并不少见
有关Elixir流程的更多信息,请参阅链接页面。操作系统流程和O
我有一个带有where条件的查询。where条件中的某些值可能为nil,因此不应查询。我提出了如下模式匹配和自定义函数:
defp add_country(query, nil), do: query
defp add_country(query, country_id), do: from a in query, where: a.country_id == ^country_id
defp add_port(query, nil), do: query
defp add_port(query
我试图创建一个函数,它接受两个列表作为参数,并且每个列表(a)不是空的,并且(b)是某个结构的列表。这样的东西可以满足我的需要:
def zip_sports_and_leagues(
[%Sport{} | _tail] = sports,
[%League{} | _tail] = leagues
) do
# Do stuff with `sports` and `leagues`
end
当第一个列表有多个项时,我得到一个与该函数匹配的“no function子句”错误
我
在一个模块中,我正在调用HTTPoison.start()(相关问题)
但是我想在mix.ex中配置它,我已经阅读了mix-ex文档并将其添加到extra\u应用程序中:[:httpoison],但是没有工作,还尝试了应用程序和包含的应用程序,我做错了什么
编辑
在有人提出可能的解决方案之前,我将回答elixir论坛的回复:
额外应用程序中列出的应用程序仍在启动时启动
启动时,而不是编译时。如果您需要在上使用HTTPoison
编译时,您需要在编译时手动启动它
发布您的mix.exs文件和调用H
我通过互相发送消息来创建多个genservergossing。我已经设置了一个退出条件,使每个进程在收到10条消息后死亡。每个GenServer都是在launch功能的闲聊开始时创建的
defmodule-do
使用GenServer
#开始流言蜚语
def start_链接(watcher\\nil),do:GenServer.start_链接(_模块,watcher)
definit(watcher),do:{:好的,{[],0,watcher}
def启动(n,观察者\\nil)执行
乘员
我正在尝试进行本地文件上载,但当我进行POST请求时,我得到了无效的CSRF(跨站点请求伪造)令牌,请确保所有请求都包含有效的“\u CSRF\u token”参数或“x-CSRF-token”头错误
我已经尝试调用这个函数了
def csrf_token(conn) do
Plug.Conn.get_session(conn, :csrf_token)
end
my.html.eex:
<form action="/accounts/new/csv-validator" met
我将其导入到config.exs文件中:
use Mix.Config
import_config "#{Mix.env}.exs"
或
当我尝试运行混合测试时,它会抱怨:
mix test
** (Code.LoadError) could not load /Users/romenigld/workspace/elixir/ebooks/issues/config/test.exs
(elixir) lib/c
我在提交表单时遇到此错误。表单确实有一个隐藏的_csrf_令牌字段,如下面的屏幕截图所示:
但是,提交时,令牌验证失败:
[debug] ** (Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Request
Forgery) token, make sure all requests include a valid '_csrf_token' param or
'x-csrf-token' heade
如果Guardian访问令牌已过期,是否有方法刷新该令牌?根据定义,过期令牌不能使用。您应该在令牌过期之前刷新它。对于每个包,您可以这样做:
# Refresh a token before it expires
{:ok, _old_stuff, {new_token, new_claims}} = MyApp.Guardian.refresh(token)
我在值列表上循环,在列表中我有一个案例来选择应该返回什么。代码循环代码如下所示:
value = code &&& key
IO.puts "+++++"
IO.puts "key:#{key},code:#{code},code &&& key:#{value},value == key:#{value == key}"
case value do
key -> IO.puts "value is true"
_ -> IO.
标签: Elixir
phoenix-frameworkseeding
我正在创建一个phoenix api应用程序。这是我的密码
alias CardsWeb.Repo
alias CardsWeb.Infrastructure.User
Repo.insert! %User{login: "user", firstname: "User", lastname: "User", dateOfBirth: "1999-5-18"}
当我运行它时,我得到以下错误
** (CompileError) priv/repo/seeds.exs:15: Infrastru
我无法成功运行EXTO迁移以删除最初创建时提供有:name属性的唯一索引(因此未使用默认索引名称)。然而,我现在无法删除该索引,因为似乎Ecto正在尝试查找名称不正确的索引(尽管我提供了它)
唯一索引最初是通过如下迁移创建的:
def change do
create(
unique_index("foo", [:bar_id],
where: "rejected IS NULL AND accepted IS NULL)",
我尝试了这两行简单的Enum.drop\u,而。。。看起来很简单,但我不明白为什么他们会出现不同:
iex(6)>1..100 |>Enum.drop_while(fn(x)->rem(x,10)==0 end)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
我已通过自制在mac电脑中安装了Elixir,但当我尝试运行iex时,它会报告错误:
iex
/usr/local/Cellar/elixir/1.1.1/bin/elixir:第109行:执行代码:erl:未找到
看起来您只是缺少了Erlang,这是长生不老药所需要的
您可以在Elixir文档中找到更多信息,以了解如何在OS X上安装Erlang:
Riak文档也很有帮助:
祝你好运 缺少Erlang,但是通过homebrew进行的默认安装应该安装所有必需的文件(我以相同的方式安装,并且所有依
标签: Elixir
phoenix-frameworkdialyzer
透析器抱怨菲尼克斯模型以通常的方式安装,即
def changeset(model, params \\ :empty)
...
参数指示如何更新模型,默认值为:empty以区分“params”等于空映射的空白表单提交
透析器警告:
The call 'Elixir.Backend.Plot':
changeset(x0@1::any(),'empty') will never return since it differs in the 2nd argument from the succe
Mix提供了一个伞形项目的功能,其中独立的功能(应用程序)可以一起运行,但可以松散耦合并单独开发
在我的phoenix应用程序中,我想将身份验证逻辑移动到一个单独的应用程序中,以便以后重用它。然而,对于我的认证应用程序/模块,我需要phoenix提供的模型/视图/控制器功能,我不想仅仅为此生成整个新的phoenix项目
在凤凰城实现这一目标的最佳方式是什么
我已经看过了,但是没有多大帮助
在中有一个类似的概念,但是它是在层次上完成的。因此,有明确的方法在项目内部连接应用程序,并且允许应用程序拥有
我正试图找出如何将浮点转换为字符串/二进制,但似乎不像看上去那么容易
iex(1)> to_string(1200.00)
"1.2e3"
iex(2)> Float.to_string(1200.00)
"1.2e3"
我们需要“1200.00”出来…只是不是指数符号,没有关于用例的更多细节,这将为您提供所需的结果:
iex(1)> Float.to_string(1200.00, decimals: 2)
"1200.00"
它使用的是erlang的float\u t
可能是一个非常基本的长生不老药问题
我想把偶数从1和10相加,然后输出到IO
首先,我尝试这样做:
1..10
|> Enum.filter(fn (x) -> rem(x, 2) == 0 end)
|> Enum.sum
|> IO.puts
这和预期的一样
然后我尝试在模块内定义该函数,如下所示:
defmodule Test do
def is_even(x) do
rem(x, 2) == 0
end
end
1..10
|> Enu
在Elixir中,pin运算符用于防止变量重新绑定。但是,对于类似于
from u in User, where: u.username == ^username
《凤凰城》节目的作者(第7章)说
请记住,^运算符(称为pin运算符)表示我们希望保持^用户名不变
但这听起来并不正确,因为显然,查询中的比较不会导致变量的任何重新绑定
这本书的作者(何塞·瓦利姆(JoséValim)合著)错了吗?EXTO查询中的pin操作符仅仅是EXTO DSL的构造,而不是通常的Elixir pin操作符吗?或
ElixirURI.encode\u query适用于非嵌套映射,如:
URI.encode_query(%{ a: "b", c: "d" }) # => "a=b&c=d"
但如果我尝试对嵌套映射进行编码,比如
URI.encode_query(%{ a: %{ b: "c" } })
我明白了
如何使用嵌套映射对查询进行编码?Elixir的URI模块不支持嵌套映射,但您可以使用plug包的plug.Conn.query.encode/1来支持嵌套映射:
iex(1)>
我正在运行这个命令
$ mix archive.install github ninenines/cowboy
* Getting new package (https://github.com/ninenines/cowboy.git)
remote: Counting objects: 9525, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 9525 (delta 0
此模式匹配通过的原因:
%%{“asd”=>%%{}}=%%{“asd”=>%%{“qwe”=>“”}
而这个没有(匹配错误):
x=%{}
%{“asd”=>^x}=%{“asd”=>%{“qwe”=>“}”
?
编辑:发现pin运算符意味着它必须等于。现在,如何匹配此映射中的x变量?根据定义,左侧的固定变量值必须等于右侧的相应值()
因此,以下匹配将起作用:
x = %{"qwe" => ""}
%{"asd" => ^x} = %{"asd" => %{"qwe" =&
我得到一个错误,说找不到get/2函数,这是在您创建新elixir项目时创建的测试中,我只将其更改为ExUnit测试。
我做错了什么
use ExUnit.Case
test "GET /", %{conn: conn} do
conn = get conn, "/"
assert html_response(conn, 200) =~ "Welcome to Phoenix"
end
您试图使用()的函数来自,您可以通过使用生成的ProjectName.ConnCase模块获得该函
我有一个流,它产生数据的速度不如它消耗的速度快
我有一个制作人的定义如下:
def start_link() do
create_stream
|> GenStage.from_enumerable(name: Producer)
end
children = [
Consumer,
FlowProducerWorker # worker which implements Flow.into_stages(flow, [Consumer])
]
然后我的制作人和消费者订
我用的是库十进制
如果我有一个浮点小数:
pry(4)> a1
#Decimal<179.4>
但是我不知道如何在这里应用它。接受模式作为第三个参数。这里不需要上下文,除非您希望对所有内容应用相同的舍入上下文
dec=十进制自浮点数(3.14)
dec |>Decimal.round()|>Decimal.to_integer()
#⇒ 3.
dec |>Decimal.round(0,:down)|>Decimal.to_integer()
#⇒ 3.
dec |>Deci
我正在创建一个case语句,并得出了一个我认为进行模式匹配比较可能很好/适用的案例。我似乎在网上找不到关于它的任何东西。以以下假设为例:
person = %Person{first_name: "Test", last_name: "example}
person2 = %Person{first_name: "another", last_name: "person"}
case list do
[] ->
:empty
[person, person2]
标签: Elixir
phoenix-frameworkectoelixir-mix
这是我第一次使用长生不老药+凤凰。我只是尝试运行mix-exto.create,出现以下错误:
19:08:28.529 [error] GenServer #PID<0.295.0> terminating
** (DBConnection.ConnectionError) tcp connect (localhost:5432): connection refused - :econnrefused
(db_connection) lib/db_connectio
如果我们检查在中使用EXTO片段的示例,它会说为了使用来自另一个模块的宏,我们需要首先导入该模块。因此,如果我们有一个带有coalesce/2宏的模块:
defmodule CustomFunctions do
defmacro coalesce(left, right) do
quote do
fragment("coalesce(?, ?)", unquote(left), unquote(right))
end
end
end
我们需要将其导入另一个模
我正在尝试获取elixir项目的依赖项。我不知道Hex是不是坏了(今天早上我能拍到很好的照片)。当我跑的时候
$ mix deps.get
我看到:
Failed to fetch record for 'hexpm/phoenix_live_reload' from registry (using cache)
{:failed_connect, [{:to_address, {'repo.hex.pm', 443}}, {:inet, [:inet], {:option, :ser
我有几个关键的价值清单,像这样
fans=[%{“结束时间”=>“2021-01-02T08:00:00+0000”,“值”=>514210},
%{“结束时间”=>“2021-01-03T08:00:00+0000”,“值”=>513702},
%{“结束时间”=>“2021-01-04T08:00:00+0000”,“值”=>513720},
%{“结束时间”=>“2021-01-05T08:00:00+0000”,“值”=>513775}]
唯一性=[%{“结束时间”=>“2021-01-
上一页 1 2 ...
74 75 76 77 78 79 80 ...
下一页 最后一页 共 125 页