有没有人知道(或可以提供)如何使用ecto DSL更改表列名称的示例
我猜我只是使用mix ecto.gen.migration然后我会用我的自定义代码填写空的创建文件(如果是这样,你将如何编辑列名,文档显示修改以更改列类型)
或者是否有一个命令行标志我可以传递给我生成迁移代码?
我有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(我假设因为有一个与该用户关联的"其他"记录)
那么我将如何以我想要的方式工作呢:
对于引用它的任何项目,基本上是用户级联删除
我想检查给定的URL是否有效,理想情况下,如果URL也解析了.
首先,我将如何检查字符串的有效性(即正则表达式)
其次,有没有办法让我看到网址是否真的解析为互联网上的资源?
谢谢
我正在尝试在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) 我有一个凤凰路线,我想将一些表格数据发布到,但是表格中有大约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个可选?如果我将它们全部添加到那时它们将是必需的,我不希望为每个可能提交的表单创建一个函数,因为它似乎有点过分.
我的头衔不是很好,因为我发现很难用小片段来解释我想要的东西......所以我会深入尝试!
我正在使用Phoenix Web框架编写Elixir应用程序.
我想要做的是:
该过程不需要返回到Web路由(即其异步)
我知道如何通过使用消息队列(Beanstalk,RabbitMQ,sidekiq)来处理其他语言,并将"作业"交给工作人员,然后编写工作人员来处理队列中的作业.
但是......我知道在Elixir中它默认排队,因为所有内容都被推入"邮箱"(在YouTube视频中看到它:p)
但是我找不到任何合适的代码示例来说明如何让控制器(在phoenix中)产生一个异步进程,该进程将在消息队列中处理.
有没有人知道任何体面的资源,显示我正在寻找什么,或者是否有人有任何代码片段,将给我一个基本的描述如何做到这一点.
谢谢 :)
编辑:
正如评论中所提到的,我已经创建了一个基本教程,介绍如何在Elixir应用程序中启动和运行Poolboy.我希望它对人们有用(并且正确!):)
我有一个接受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不为参数采用数组.
有任何想法吗?
我想知道是否可以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的每个组来说都是愚蠢的,不是很有效,我应该是能够处理一次正则表达式并存储所有组以供以后使用.
有任何想法吗?
我有一个外部URL(第三方代码),我想发布一些数据,我不必等待响应.
我如何在Elixir中这样做(如果可能的话?)
实际上我想将一些数据转换为外部URL
我有一个凤凰应用程序(它只是一个没有前端的宁静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)