我从GenServer中的句柄信息功能调用elixir genserver来添加电话号码获取表单客户端.但是一旦调用handle_call,所有者进程就会崩溃[timeout].请帮忙.
全局创建一个ETS以在调用任何下面描述的函数之前插入值.
def handle_info(message, state) do
{a,b} = message
phonenumber = b[:body]
add phonenumber
{:noreply, state}
end
def add(phonenumber) do
GenServer.call(__MODULE__, {:add, phonenumber})
end
def handle_call({:add, phonenumber}, from, state) do
:ets.insert(:access_table, {:details, phonenumber})
reply = {:ok, "Added #{phonenumber} to profile"}
new_state = [{username} | state]
{:reply, reply , new_state}
end
Run Code Online (Sandbox Code Playgroud)
错误:
** When Server state == []
** Reason for termination ==
** {timeout,{gen_server,call,['Elixir.Bankrecord',{add,"346534543534"},5000]}}
** (EXIT from #PID<0.150.0>) exited in: :gen_server.call(Bankrecord, {:add, '346534543534'}, 5000)
** (EXIT) time out
Run Code Online (Sandbox Code Playgroud) 我今天刚刚开始使用Elixir和Phoenix,我试图将Ecto添加为映射器,但是我在使用时间时遇到了一些麻烦.
这是我的模特.
schema "users" do
field :name, :string
field :email, :string
field :created_at, :datetime, default: Ecto.DateTime.local
field :updated_at, :datetime, default: Ecto.DateTime.local
end
Run Code Online (Sandbox Code Playgroud)
我试图在默认情况下设置created_at和updated_at,但是当我尝试编译它时,我收到以下错误.
== Compilation error on file web/models/user.ex ==
** (ArgumentError) invalid default argument `%Ecto.DateTime{day: 13, hour: 19, min: 47, month: 2, sec: 12, year: 2015}` for `:datetime`
lib/ecto/schema.ex:687: Ecto.Schema.check_default!/2
lib/ecto/schema.ex:522: Ecto.Schema.__field__/4
web/models/board.ex:9: (module)
(stdlib) erl_eval.erl:657: :erl_eval.do_apply/6
Run Code Online (Sandbox Code Playgroud)
获取文档没有太大帮助,这样做的正确方法是什么?
我知道可以将一个单独传递list给一个函数然后迭代它.但是,我更喜欢具有更明确签名的函数.所以我真正想知道的是Elixir是否有任何arguments与Javascript中的对象相同的东西.
据我所知,答案是否定的.我在讨论这个话题时最接近的是这个问题的答案.
我正在寻找这个功能的原因是,我有几次发现自己将相同的转换应用于多个参数,这有点单调乏味.这可能是通过宏实现的吗?
Phoenix Framework是否使用任何类型的回调过滤器,例如Rails中的回调过滤器?我知道这是可能来验证的变更,但是我正在寻找方法来实现,例如动作before_create, before_save和after_commit.
我正在阅读凤凰城会议指南.它很好地解释了我如何使用put_session以后使用和获取值来将数据绑定到会话,get_session但它没有告诉我如何删除用户的会话.
从指南:
defmodule HelloPhoenix.PageController do
use Phoenix.Controller
def index(conn, _params) do
conn = put_session(conn, :message, "new stuff we just set in the session")
message = get_session(conn, :message)
text conn, message
end
end
Run Code Online (Sandbox Code Playgroud) 在Phoenix,有什么方法可以指定使用哪个View而不是让Controller命名空间中的变形?
我有多个控制器,每个控制器的视图方法都相同.我想创建一个单独的视图,并与(几乎)我的所有控制器一起使用它.
这可能吗?更重要的是,这是一种不好的做法还是在我的情况下是合理的?
我想知道如何从给定的字符串中删除逗号.我的尝试是:
st = "1,2,3"
String.strip(st, ?,)
#=> "1,2,3"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
product我的elixir/phoenix后端有两个控制器.第一 - API端点(pipe_through :api)和第二个控制器piping through :browser:
# router.ex
scope "/api", SecretApp.Api, as: :api do
pipe_through :api
resources "products", ProductController, only: [:create, :index]
end
scope "/", SecretApp do
pipe_through :browser # Use the default browser stack
resources "products", ProductController, only: [:new, :create, :index]
end
Run Code Online (Sandbox Code Playgroud)
ProductController处理来自elixir表单助手生成的表单的请求,并接受一些文件附件.一切都很好.这是由此操作处理的create action和params:
def create(conn, %{"product" => product_params}) do
changeset = Product.changeset(%Product{}, product_params)
case Repo.insert(changeset) do
{:ok, _product} ->
conn
|> put_flash(:info, "Product created successfully.")
|> redirect(to: product_path(conn, :index))
{:error, changeset} -> …Run Code Online (Sandbox Code Playgroud) 我想在Elixir中创建一个枚举.可能吗?通过枚举我的意思是来自C/C++或Ruby或许多其他语言的枚举.我知道Enum模块,但这只是一个模块 - 基本上是函数的容器.
我们正在建立一个应用程序,我是一名司机,我从A点到B点旅行.在我的路上,我可以找到以相同路线旅行的乘客.
我们正在使用PostgreSQL和PostGIS扩展.
经过谷歌搜索后,我发现我们可以使用线串来实现这一点.我不完全确定这种方法是否会成功.
假设我有源和目的地的坐标.
var RouteCoordinates = [
{lat: 37.772, lng: -122.214},
{lat: 21.291, lng: -157.821},
{lat: -18.142, lng: 178.431},
{lat: -27.467, lng: 153.027}
];
Run Code Online (Sandbox Code Playgroud)
我需要将其存储为我的数据库中的线串.
如果一名乘客也在这条路线上行驶,但我们知道他的来源和目的地不会完全在我的线路中,但他们会在附近.例如,半径约1km
正如您所看到的那样,我的源和目的地就是那条线.当我旅行时,我想挑选所有那些(源和目的地)靠近我的路线(在特定半径范围内)的人
如果我想在特定半径范围内找到我的数据库中的特定位置,我将会这样查询
SELECT id, name, address, geom
FROM Seattle_Starbucks
WHERE ST_DWithin(geom, ST_MakePoint(-122.325959,47.625138)::geography, 1000);
Run Code Online (Sandbox Code Playgroud)
现在我可以实现我的解决方案,因为我刚接触postGIS有点令人困惑
ANS:我需要使用此函数ST_MakeLine转换为linestring,然后存储,对吧?
能否请您告诉我如何实现这一目标.非常感谢您的帮助.谢谢
elixir ×10
ecto ×2
postgresql ×2
file ×1
gen-server ×1
geo ×1
postgis ×1
reactjs ×1
redux ×1
redux-form ×1