小编The*_*Fox的帖子

如何使用迁移更改Ecto模型中的列名?

有没有人知道(或可以提供)如何使用ecto DSL更改表列名称的示例

我猜我只是使用mix ecto.gen.migration然后我会用我的自定义代码填写空的创建文件(如果是这样,你将如何编辑列名,文档显示修改以更改列类型)

或者是否有一个命令行标志我可以传递给我生成迁移代码?

elixir ecto

36
推荐指数
2
解决办法
8223
查看次数

Ecto删除引用的数据库记录

我有2张桌子:

用户:

id
username
password

unique_index username

(the schema has a has_many other)
Run Code Online (Sandbox Code Playgroud)

其他:

id
user_id - references(:users)
foo

index user_id

(the schema has a belongs_to user)
Run Code Online (Sandbox Code Playgroud)

在"其他"的变更集中,我有这个

model
|> cast(params, @req, @opt)
|> foreign_key_constraint(:user_id)
Run Code Online (Sandbox Code Playgroud)

我在这一点上的假设是"其他"ecto模型需要一个"用户"与它相关联才能存在(这就是我想要的)

但我的第二个假设是,如果我删除"用户"记录,那么所有关联的"其他"记录将被删除(通过级联删除)

实际发生的是我在尝试删除"用户"记录时有一个Ecto.ConstraintError(我假设因为有一个与该用户关联的"其他"记录)

那么我将如何以我想要的方式工作呢:

  • "用户"可以独立创建
  • 可以创建"其他"但必须属于"用户"
  • 当删除"其他"时,它不会影响任何其他内容
  • 删除"用户"时,它也会删除所有关联的"其他"记录

对于引用它的任何项目,基本上是用户级联删除

elixir ecto

20
推荐指数
2
解决办法
8830
查看次数

检查elixir中的URL是否有效

我想检查给定的URL是否有效,理想情况下,如果URL也解析了.

首先,我将如何检查字符串的有效性(即正则表达式)

其次,有没有办法让我看到网址是否真的解析为互联网上的资源?

谢谢

elixir

14
推荐指数
1
解决办法
2859
查看次数

如何在Jest中手动模拟自己的一个文件?

我正在尝试在Jest中模拟一个对象(我创建的),因此我可以在react组件中提供默认行为(因此不使用真正的实现)

这是我的反应组件ChatApp(它很直接)

'use strict';
var React, ChatApp, ChatPanel, i18n;

React = require('react');
ChatPanel = require('./chat_panel');
i18n = require('../support/i18n');

ChatApp = React.createClass({
  render() {
    return (
      <div className="chat-app">
        <h1>{i18n.t("app.title")}</h1>
        <ChatPanel />
      </div>
    );
  }
});

module.exports = ChatApp;
Run Code Online (Sandbox Code Playgroud)

所以我有一个自定义的I18n依赖项进行翻译(I18n是我写的,它是node-polyglot的包装器).

所以我想做一个基本测试,看看H1中是否有正确的单词,但我不想在我的I18n对象上设置jest.dontMock(),因为我不希望它使用真实对象在ChatApp测试中.

因此,按照开玩笑网站上的基本说明,我创建了一个mocks文件夹,并为i18n创建了一个模拟文件,它从原始对象生成一个模拟,然后覆盖t方法并添加一个方法,允许我设置返回字符串为吨.

这是模拟对象

'use strict';
var i18nMock, _returnString;

i18nMock = jest.genMockFromModule('../scripts/support/i18n');

_returnString = "";

function __setReturnString(string) {
  _returnString = string;
}

function t(key, options = null) {
  return _returnString;
}

i18nMock.t.mockImplementation(t);
i18nMock.__setReturnString = __setReturnString;

module.exports = i18nMock;
Run Code Online (Sandbox Code Playgroud)

现在在我的ChatApp测试中,我需要在每个之前使用模拟,如下所示:

'use strict'; …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing reactjs jestjs

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

Elixir Phoenix中的可选POST参数

我有一个凤凰路线,我想将一些表格数据发布到,但是表格中有大约4个字段是可选的(表格由最终用户构建,因此这些字段可能不存在于POST有效载荷中)

在路线的凤凰控制器中,您将如何处理?

例如:

我的表格有

Field1,
Field2
Field3 (optional)
Field4 (optional)
Field5 (optional)
Run Code Online (Sandbox Code Playgroud)

POST表单必须始终具有Field1,Field2但可以包含其他字段的任意组合.

所以到目前为止我的控制器代码是这样的:

def create(conn, %{"field1" => field1, "field2" => field2) do
end
Run Code Online (Sandbox Code Playgroud)

如何让其他3个可选?如果我将它们全部添加到那时它们将是必需的,我不希望为每个可能提交的表单创建一个函数,因为它似乎有点过分.

elixir phoenix-framework

11
推荐指数
1
解决办法
4026
查看次数

将操作推送到消息队列以便在需要时进行处理

我的头衔不是很好,因为我发现很难用小片段来解释我想要的东西......所以我会深入尝试!

我正在使用Phoenix Web框架编写Elixir应用程序.

我想要做的是:

  • 调用一个web路由,凤凰处理并传递给控制器
  • 控制器用于启动要切换到消息队列的进程
  • 资源可用时要处理的队列中的最新项(即CPU /内存/等)

该过程不需要返回到Web路由(即其异步)

我知道如何通过使用消息队列(Beanstalk,RabbitMQ,sidekiq)来处理其他语言,并将"作业"交给工作人员,然后编写工作人员来处理队列中的作业.

但是......我知道在Elixir中它默认排队,因为所有内容都被推入"邮箱"(在YouTube视频中看到它:p)

但是我找不到任何合适的代码示例来说明如何让控制器(在phoenix中)产生一个异步进程,该进程将在消息队列中处理.

有没有人知道任何体面的资源,显示我正在寻找什么,或者是否有人有任何代码片段,将给我一个基本的描述如何做到这一点.

谢谢 :)

编辑:

正如评论中所提到的,我已经创建了一个基本教程,介绍如何在Elixir应用程序中启动和运行Poolboy.我希望它对人们有用(并且正确!):)

https://github.com/thestonefox/elixir_poolboy_example

elixir phoenix-framework

8
推荐指数
2
解决办法
2225
查看次数

是否可以将数组转换为函数的参数列表?

我有一个接受n多个参数的函数(它是devinus/sh函数),您可以在其中执行命令行程序并获得结果:

例: Sh.file "-b", "--mime-type", path_to_file

但我希望在数组中包含参数,以便它们可以根据函数的调用方式而变化.

我想要的例子:

data = ["-b", "--mime-type", path_to_file]

# a way of going through the array and turning it into the parameters for the Sh function

Sh.file <loop array params here>
Run Code Online (Sandbox Code Playgroud)

Sh不为参数采用数组.

有任何想法吗?

elixir

8
推荐指数
1
解决办法
451
查看次数

XSL Analyze-String - >匹配 - 子串到多个变量

我想知道是否可以analyze-string在RegEx中使用和设置多个组,然后将所有匹配组存储在变量中以供稍后使用.

像这样:

<xsl:analyze-string regex="^Blah\s+(\d+)\s+Bloo\s+(\d+)\s+Blee" select=".">
  <xsl:matching-substring>
    <xsl:variable name="varX">
      <xsl:value-of select="regex-group(1)"/>
    </xsl:variable>                                
    <xsl:variable name="varY">
      <xsl:value-of select="regex-group(2)"/>
    </xsl:variable>        
  </xsl:matching-substring>
</xsl:analyze-string>    
Run Code Online (Sandbox Code Playgroud)

这实际上并不起作用,但这就是我所追求的事情,我知道我可以将其包装analyze-string在一个变量中,但这对于我必须处理RegEx的每个组来说都是愚蠢的,不是很有效,我应该是能够处理一次正则表达式并存储所有组以供以后使用.

有任何想法吗?

xslt xslt-2.0

7
推荐指数
2
解决办法
4764
查看次数

Elixir有可能发出一个http POST请求将一些数据推送到外部URL吗?

我有一个外部URL(第三方代码),我想发布一些数据,我不必等待响应.

我如何在Elixir中这样做(如果可能的话?)

实际上我想将一些数据转换为外部URL

elixir

7
推荐指数
1
解决办法
4618
查看次数

如何在我的ExUnit测试中存根(或阻止运行)对工作者的调用?

我有一个凤凰应用程序(它只是一个没有前端的宁静api),其中一个控制器做了一些我想测试的东西,但是在控制器的末尾它调用一个调度程序,它将一个有效负载发送给一个工人(在poolboy下运行)在后台处理收到的有效负载.

在我的控制器测试中,我实际上并不想测试工作者正在做的事情,我只是想知道已经使用正确的有效负载调用了worker的调度程序(例如,calledWith())

理想情况下,调度程序的功能是存根的,所以实际的东西永远不会运行.

我可以将一个额外的参数传递给调度程序,以确保它永远不会在worker上运行代码,但这似乎非常混乱,而存根似乎是个主意.

谢谢

编辑

调度程序代码:

defmodule Convert.Dispatcher do
  def dispatch(data) fo
   spawn (fn() -> parallel(data) end)
  end

  def parallel(data) do
    #pass off to poolboy
  end
end
Run Code Online (Sandbox Code Playgroud)

测试模拟:

with_mock Convert.Dispatcher, [dispatch: fn(_opts) -> :ok end] do
  response = conn(:post, "/", data) |> send_request
  body = response.resp_body |> Poison.decode!
  assert response.status == 201
  assert called Convert.Dispatcher.dispatch("")
end
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

6
推荐指数
1
解决办法
1614
查看次数