标签: elixir

在Ecto中一起创建两个列的唯一约束

如何在Ecto中的两列上创建唯一索引,这对应于:

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    primary key (col1, col2)
)
Run Code Online (Sandbox Code Playgroud)

elixir ecto

31
推荐指数
3
解决办法
1万
查看次数

Cond和Case有什么区别?

在Elixir编程语言中,有两个类似的结构condcase.两者都类似于其他语言switchselect其他语言

双方condcase在描述此页

elixir switch-statement

30
推荐指数
2
解决办法
5344
查看次数

我们如何轻松地在灵药中调用函数调用?

怎样才能轻松地时间功能的药剂电话?

IEx中是否有任何隐藏的开关来启用此功能?

function timing elixir

30
推荐指数
2
解决办法
1万
查看次数

另一种退出IEX而不是ctrl-C的方法

我知道我们可以使用control-C退出IEX控制台.我很好奇是否有一个命令输入控制台也会做同样的事情.

elixir iex

30
推荐指数
4
解决办法
5492
查看次数

Elixir的退货声明

我需要一个具有某种逐步逻辑的函数,我想知道如何制作一个.我们以站点上的登录过程为例,所以我需要以下逻辑:

1)电子邮件存在?是的 - >继续; 否 - >返回错误

2)电子邮件至少有5个字符?是的 - >继续; 否 - >返回错误

3)密码存在?是的 - >继续; 否 - 返回错误

等等 ...

为了实现这一点,我通常会使用一个return语句,以便如果电子邮件不存在,我退出执行该函数并使其返回错误.但是我在Elixir找不到类似的东西,所以我需要一个建议.我现在能看到的唯一方法是使用嵌套条件,但也许有更好的方法?

elixir phoenix-framework

30
推荐指数
3
解决办法
9608
查看次数

如何在elixir中通过索引获取列表元素

{status, body} = File.read("/etc/hosts")
if status == :ok do
    hosts = String.split body, "\n"
    hosts = Enum.map(hosts, fn(host) -> line_to_host(host) end)
else
    IO.puts "error reading: /etc/hosts"
end
Run Code Online (Sandbox Code Playgroud)

我有以下elixir函数,其中我读取/ etc/hosts文件并尝试使用逐行拆分String.split.

然后我映射主机的行列表并为每个主机调用line_to_host(host).line_to_host方法拆分行" ",然后我想设置fromto变量:

def line_to_host(line) do
    data = String.split line, " "
    from = elem(data, 0) // doesn't work
    to = elem(data, 1) // doesn't work either
    %Host{from: from, to: to}
end
Run Code Online (Sandbox Code Playgroud)

我查看了stackoverflow,elixir文档,并搜索了如何在特定索引处获取列表元素.我知道有,head/tail但必须有一个更好的方法来获取列表元素.

elem(list, index)完全符合我的需要,但遗憾的是它无法使用String.split.

如何在elixir中按ID获取列表/元组元素

arrays list elixir

30
推荐指数
1
解决办法
2万
查看次数

修改Ecto中的外键

我有这个已经运行并向上游发送的原始迁移:

create table(:videos) do
  add :url, :string
  add :title, :string
  add :description, :text
  add :user_id, references(:users, on_delete: :nothing)

  timestamps
end
create index(:videos, [:user_id])
Run Code Online (Sandbox Code Playgroud)

现在我希望将外键user_id改为级联删除,这样当用户被删除时,他的所有相关视频也将被删除.

我尝试过以下迁移:

alter table(:videos) do
  modify :user_id, references(:users, on_delete: :delete_all)
end
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

(Postgrex.Error) ERROR (duplicate_object): constraint "videos_user_id_fkey" for relation "videos" already exists
Run Code Online (Sandbox Code Playgroud)

如何根据我的要求制定将更改此外键的迁移脚本?


UPDATE

我最终得到了以下解决方案:

def up do
  execute "ALTER TABLE videos DROP CONSTRAINT videos_user_id_fkey"
  alter table(:videos) do
    modify :user_id, references(:users, on_delete: :delete_all)
  end
end

def down do
  execute "ALTER TABLE videos DROP CONSTRAINT videos_user_id_fkey" …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

30
推荐指数
4
解决办法
6090
查看次数

如何查看为Ecto.Query生成的原始SQL?

我有一个Ecto.Query和一个Repo,这样我就可以打电话Repo.all(query)并获得结果.但是,结果并不是我所期望的.

如何查看Repo将从中生成的原始SQL Ecto.Query

elixir ecto

30
推荐指数
2
解决办法
8719
查看次数

Phoenix - 具有多个渲染的控制器

尝试使用Elixir + Phoenix创建一个应用程序,它将能够处理"浏览器"和"api"请求以处理其资源.

是否可以这样做而不必做那样的事情:

scope "/", App do
  pipe_through :browser

  resources "/users", UserController
end

scope "/api", App.API as: :api do
  pipe_through :api

  resources "/users", UserController
end
Run Code Online (Sandbox Code Playgroud)

这意味着必须创建两个控制器,这些控制器可能具有相同的行为,除了它将使用浏览器管道呈现HTML ,例如JSON,用于api管道.

我想的可能就是Rails respond_to do |format| ...

elixir phoenix-framework

29
推荐指数
2
解决办法
5961
查看次数

从列表中获取随机元素

我基本上都在寻找相当于Ruby的Elixir Array#sample.可以让我这样做的东西:

list = [1,2,3,4,5,6,7]

sample(list)
#=> 4

sample(list, 3)
#=> [6, 2, 5]
Run Code Online (Sandbox Code Playgroud)

我也没有在Elixir List Docs中找到任何内容.

elixir

29
推荐指数
3
解决办法
1万
查看次数