我想使用Elixir Ecto中的关键字"between"创建一个SQL.
我知道如何使用创建一个SQL like
where: like(t.descript, ^some_description)
但是,当我尝试以同样的方式做到这一点 like
where: between(t.start_date, ^start_date, ^end_date),
我收到了"无效"错误信息
** (Ecto.Query.CompileError) `between(t.start_date(), ^start_date, ^end_date)` is not a valid query expression.**
Run Code Online (Sandbox Code Playgroud)
我怎么能以正确的方式做到这一点?
提前致谢!!
我在elixir中试验Macros.因此,我即将展示的代码当然应该用简单的函数完成,但是......我正在试验!
我想定义2个宏(A和B)并使A使用B来试验宏扩展.当我使用A时,我收到一个编译错误,说明函数 B 未定义.
这是代码:
defmodule MyMacros do
defmacro print_expr(expr) do
quote do
IO.puts(unquote(expr))
end
end
defmacro print_hashes_around(expr) do
quote do
IO.puts "###"
print_expr(unquote(expr))
IO.puts "###"
end
end
end
defmodule MyModule do
require MyMacros
def my_print(expr) do
MyMacros.print_hashes_around(expr)
end
end
MyModule.my_print("hello world")
Run Code Online (Sandbox Code Playgroud)
这是编译错误:
macro_test.exs:17: warning: redefining module MyModule
** (CompileError) macro_test.exs:21: function print_expr/1 undefined
(stdlib) lists.erl:1336: :lists.foreach/2
macro_test.exs:17: (file)
(elixir) lib/code.ex:307: Code.require_file/2
Run Code Online (Sandbox Code Playgroud)
我(错)理解事物的方式:
我对吗 ?
至于建议在农闲,前缀print_expr与MyMacros.修复它.我还是不明白为什么.MyModule需要MyMacros这样两个宏都应该是已知的并且可以扩展......当我看到unless …
我是Elixir和Phoenix Framework的新世界.我正在尝试关注TheFireHoseProject教程,但是在使用Ecto查询原始SQL时遇到问题.该教程说这应该工作:
defmodule Queries do
def random do
query = Ecto.Adapters.Postgres.query(
Repo,
"SELECT id, saying, author from quotes ORDER BY RANDOM() LIMIT 1",
[])
%Postgrex.Result{rows: [row]} = query
{id, saying, author} = row
%Splurty.Quote{id: id, saying: saying, author: author}
end
end
Run Code Online (Sandbox Code Playgroud)
我收到一个运行时错误,即Ecto.Adapters.Postgres.query不存在(未定义的函数).
我试图搜索Ecto文档,发现可能有一个名为run_query的函数,但它也不起作用.
我想我正在使用Ecto 1.1.4并且我没有找到任何关于如何使用Ecto查询原始SQL的好(最新)样本.
firehoseproject的链接是:http://phoenix.thefirehoseproject.com/
我要解析一个xml文档,从xml节点中提取一个整数.
目前我有:
try do
Floki.find(node, "stat[type='jersey_num']")
|> Floki.text
|> Integer.parse
|> elem(0)
rescue
e -> nil
end
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但我不喜欢拯救一切,我想做的事情如下:
Floki.find(node, "stat[type='jersey_num']")
|> Floki.text
|> case Integer.parse do
{ int, _binary } -> int
_ -> nil
end
Run Code Online (Sandbox Code Playgroud)
但我进入unhandled operator ->第四行,有没有办法做到这一点?
我正在尝试做一个http请求
def getPage() do
url = "http://myurl"
body = '{
"call": "MyCall",
"app_key": "3347249693",
"param": [
{
"page" : 1,
"registres" : 100,
"filter" : "N"
}
]
}'
headers = [{"Content-type", "application/json"}]
HTTPoison.post(url, body, headers, [])
end
Run Code Online (Sandbox Code Playgroud)
这对我很有用.
我的问题是 - 如何在body请求中插入变量.含义:
def getPage(key, page, registers, filter) do
url = "http://myurl"
body = '{
"call": "MyCall",
"app_key": key,
"param": [
{
"page" : page,
"registres" : registers,
"filter" : filter
}
]
}'
headers = [{"Content-type", "application/json"}]
HTTPoison.post(url, body, headers, …Run Code Online (Sandbox Code Playgroud) 我是凤凰城/ Elixir的新手,我正试图围绕变革集团.
我知道它包含一组用于创建或更新模型的更改.
我想知道的是,在将更改推送到数据库之前,是否以及如何修改更改.
我的用例如下:
由于不变性约束,我甚至不确定是否可以直接修改变更集,但我可以创建另一个变更集以插入仓库.
欢迎任何建议,并毫不犹豫地指出我可能正在做的不良做法或愚蠢的事情!
编辑以下评论:我正在寻找类似的东西:
defp put_specialty_array(changeset) do
case changeset do
%Ecto.Changeset{valid?: true, changes: %{specialty: spec}} ->
put_change(changeset, :specialty, String.split(spec, ","))
_ ->
changeset
end
end
Run Code Online (Sandbox Code Playgroud) 我有两个型号,Person并且Pet,我希望Person能够有很多宠物,但Pet到属于只有一个人:
defmodule MyApp.Person do
use MyApp.Web, :model
alias MyApp.Pet
schema "persons" do
field :name, :string
has_many :pets, Pet
timestamps()
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [])
|> validate_required([])
end
end
Run Code Online (Sandbox Code Playgroud)
和
defmodule MyApp.Pet do
use MyApp.Web, :model
alias MyApp.Person
schema "pets" do
field :name, :string
belongs_to :person, Person
timestamps()
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [])
|> validate_required([]) …Run Code Online (Sandbox Code Playgroud) 比方说我有:
defmodule Operator do
defstruct operator: nil
@type t :: %Operator {
operator: oper
}
@type oper :: logic | arithmetic | nil
@type logic :: :or | :and
@type arithmetic :: :add | :mul
end
Run Code Online (Sandbox Code Playgroud)
然后我可以:
o = %Operator{operator: :and}
Run Code Online (Sandbox Code Playgroud)
它是可能的,以检查是否o.operator是logic,arithmetic还是nil?
我想在Elixir中创建一个枚举.可能吗?通过枚举我的意思是来自C/C++或Ruby或许多其他语言的枚举.我知道Enum模块,但这只是一个模块 - 基本上是函数的容器.