如何在Ecto中的两列上创建唯一索引,这对应于:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
primary key (col1, col2)
)
Run Code Online (Sandbox Code Playgroud)
?
在Elixir编程语言中,有两个类似的结构cond和case.两者都类似于其他语言switch或select其他语言
双方cond并case在描述此页
怎样才能轻松地时间功能的药剂电话?
IEx中是否有任何隐藏的开关来启用此功能?
我知道我们可以使用control-C退出IEX控制台.我很好奇是否有一个命令输入控制台也会做同样的事情.
我需要一个具有某种逐步逻辑的函数,我想知道如何制作一个.我们以站点上的登录过程为例,所以我需要以下逻辑:
1)电子邮件存在?是的 - >继续; 否 - >返回错误
2)电子邮件至少有5个字符?是的 - >继续; 否 - >返回错误
3)密码存在?是的 - >继续; 否 - 返回错误
等等 ...
为了实现这一点,我通常会使用一个return语句,以便如果电子邮件不存在,我退出执行该函数并使其返回错误.但是我在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方法拆分行" ",然后我想设置from和to变量:
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获取列表/元组元素
我有这个已经运行并向上游发送的原始迁移:
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) 我有一个Ecto.Query和一个Repo,这样我就可以打电话Repo.all(query)并获得结果.但是,结果并不是我所期望的.
如何查看Repo将从中生成的原始SQL Ecto.Query?
尝试使用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| ...
我基本上都在寻找相当于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中找到任何内容.