标签: phoenix-framework

如何使用Elixir生成随机url安全字符串

我需要能够生成随机url安全字符串,以便我可以在链接中使用它们(比如发送到用户电子邮件的激活链接),那么我该如何生成呢?有没有办法只使用Elixir或我必须使用一些库?

elixir phoenix-framework

35
推荐指数
3
解决办法
2万
查看次数

什么是Elixir插头?

作为Elixir和Web领域的新手(没有Web框架经验),我想知道什么是Plug?据我所知,Cowboy是一个Web服务器(虽然在Erlang,而不是Elixir),而Phoenix是一个用于构建Web应用程序的框架,但是插件是从哪里进来的?它是两者之间的抽象层,还是与Phoenix相同的抽象层中的插件系统?

elixir phoenix-framework

33
推荐指数
1
解决办法
3148
查看次数

Ecto中的多对多关系

我有一个用户模型和一个聊天模型.直观地,多个人将在任何时间属于同一个聊天组,每个人可以拥有许多聊天组.因此聊天组必须属于多个人user_id的.

我的聊天组和用户的架构是:

schema "chatGroups" do
    field :name, :string
    has_many :messages, Message
    belongs_to :user, User

    timestamps
end

schema "users" do
    field :name, :string
    has_many :chatGroups, ChatGroup

    timestamps
end
Run Code Online (Sandbox Code Playgroud)

任何建议如何处理这个?

elixir ecto phoenix-framework

32
推荐指数
2
解决办法
9419
查看次数

Elixir的退货声明

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

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

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

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

等等 ...

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

elixir phoenix-framework

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

修改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
查看次数

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
查看次数

如何回滚,重置或删除Ecto测试数据库?

通常mix.test清理测试数据库,但它不起作用.

这可能是因为我正在玩制作users架构,但不想使用我制作的东西,所以我摆脱了它.然后我重新开始为用户创建了一个与第一个不同的新模式.

当我再次尝试运行混合测试时,出现了一个错误,即某些字段不存在,应该存在新模式.

testing elixir ecto phoenix-framework

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

在不同的端口启动Phoenix应用程序与牛仔服务器

是否可以使用某些命令在控制台的不同端口上本地启动一些Phoenix应用程序mix phoenix.server --port=4001?当然,这个不起作用,但也许有类似的方法.

cowboy phoenix-framework

28
推荐指数
2
解决办法
8155
查看次数

什么是Elixir Bang功能?

我首先注意到一个带有尾随感叹号/爆炸(!)的函数,同时浏览Phoenix教程(在Incoming Events部分)

def handle_in("new_msg", %{"body" => body}, socket) do
    broadcast! socket, "new_msg", %{body: body}
    {:noreply, socket}
end
Run Code Online (Sandbox Code Playgroud)

尾随感叹号是什么意思?它有什么用吗?我一直在寻找并尝试寻找,但我不确定我是否使用了正确的条款.到目前为止,似乎只有作为约定的函数会在失败时引发错误,但总是意味着它总是意味着.

我看到它的唯一提及出现在Dave Thomas的"Programming Elixir"中:

Identifiers in Elixir are combinations of upper and lower case ASCII 
characters, digits, and underscores. Function names may end with a 
question mark or an exclamation point.
Run Code Online (Sandbox Code Playgroud)

而且在文档它提到:

Notice that when the file does not exist, the version with ! raises an
error. The version without ! is preferred when you want to handle …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

28
推荐指数
2
解决办法
5258
查看次数

如何使用Ecto构建WHERE IN数组子句?

如何在给定的ID列表中查找帖子?

这不起作用:

posts = Post |> where(id: [1, 2]) |> Repo.all
Run Code Online (Sandbox Code Playgroud)

Rails中的示例:

Post.where({ id: [1, 2]})
# SELECT * FROM posts WHERE id IN (1, 2)
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

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

标签 统计

phoenix-framework ×10

elixir ×9

ecto ×4

cowboy ×1

testing ×1