标签: elixir-framework

在Elixir中,如何使用map变量初始化结构

我知道可以创建一个struct via %User{ email: 'blah@blah.com' }.但是,如果我有一个变量params = %{email: 'blah@blah.com'},有一种方法可以使用该变量创建该结构,例如,%User{ params }.

这给出了一个错误,只是想知道你是否可以爆炸它或其他方式?

elixir elixir-framework

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

"!","?","_"和"."的含义是什么?elixir中的语法

我需要关于灵药理解下面的语法帮助!,?,_,和..elixir函数中的语法角色是什么?例如Repo.get!.

我不确定它们只是函数名称,还是有角色.虽然我知道.是为了调用匿名函数.而_对于任何一个或可变参数?

elixir elixir-framework

15
推荐指数
2
解决办法
2564
查看次数

Phoenix + Addict - POST操作上的CrossDomain错误

我正在尝试使用addict包在我的项目中进行身份验证,但每当我尝试执行操作(注册,登录...)时,我的POST都会收到CrossDomain错误.

我已经尝试添加cors_plug包来解决这些问题并添加

<input type="hidden" name="_csrf_token" value="<%= get_csrf_token %>">
Run Code Online (Sandbox Code Playgroud)

到我的index.html.eex模板页面,我仍然在我的浏览器控制台上得到这个:

POST http://localhost:4000/register 403 (Forbidden)

n.ajaxTransport.k.cors.a.crossDomain.send @ jquery-2.1.4.min.js:4

n.extend.ajax @ jquery-2.1.4.min.js:4

n.each.n.(anonymous function) @ jquery-2.1.4.min.js:4

(anonymous function) @ socket.js:62

n.event.dispatch @ jquery-2.1.4.min.js:3

n.event.add.r.handle @ jquery-2.1.4.min.js:3


XHR finished loading: POST "http://localhost:4000/register".

n.ajaxTransport.k.cors.a.crossDomain.send @ jquery-2.1.4.min.js:4

n.extend.ajax @ jquery-2.1.4.min.js:4n.each.n.(anonymous function) @ jquery-2.1.4.min.js:4

(anonymous function) @ socket.js:62n.event.dispatch @ jquery-2.1.4.min.js:3

n.event.add.r.handle @ jquery-2.1.4.min.js:3
Run Code Online (Sandbox Code Playgroud)

我的javascript代码与addict示例相同,只是我没有将它作为脚本放在我的模板中(当我尝试时甚至没有调用代码).我把它放在底部priv/static/js/app.js.js代码如下:

$('#btn-register').click(function() {
  var email = $('#txt-register-email').val();
  var username = $('#txt-register-username').val();
  var password = $('#txt-register-password').val();

  $.post('/register', …
Run Code Online (Sandbox Code Playgroud)

elixir elixir-framework phoenix-framework

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

将已有模型的Ecto模型作为关联插入

我有2个型号,entries:

schema "entries" do
  belongs_to :exception, Proj.Exception
  field :application, :string
end
Run Code Online (Sandbox Code Playgroud)

而且exceptions:

schema "exceptions" do
  field :name, :string
end
Run Code Online (Sandbox Code Playgroud)

迁移脚本:

def change do
  create table(:exceptions) do
    add :name, :string, null: false
  end

  create table(:entries) do
    add :exception_id, references(:exceptions), null: false
    add :application, :string, null: false
  end
end
Run Code Online (Sandbox Code Playgroud)

我的目标是存储在另一个系统中发生的异常.我希望项目能够将每个异常存储在第二个表中(exception如果它们尚不存在),然后将应用程序名称和异常ID存储在第一个表中entries.将有1000个记录entries和少数记录exceptions.

假设entry_params使用此JSON格式:

{
  exception: "NPE",
  application: "SomeApp"
}
Run Code Online (Sandbox Code Playgroud)

应该创建条目的方法:

def create(conn, %{"entry" => entry_params}) do
  exception = Repo.get_by(Exception, name: …
Run Code Online (Sandbox Code Playgroud)

elixir elixir-framework phoenix-framework

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

当作为函数参数传递时,elixir是否制作了地图的副本?

换句话说,我想知道在elixir中是否通过值或引用将映射传递给函数.我怀疑Elixir没有副作用的原则是值得的.但是,大型地图不会造成巨大的重复效率低下吗?

在此先感谢您的帮助.

elixir elixir-framework

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

Phoenix - invald CSRF on AJAX post

我正在学习使用Phoenix框架,我正在尝试向控制器操作执行AJAX帖子 - 但是,我遇到了CSRF保护问题.

对于初学者,我没有使用表单 - 只是想将文本从输入传递给控制器​​:

<input type="text" id="raw-input" />
<button id="send-button">Send it!</button>

<script>
$("#send-button").click(function(){
    var input = $("#raw-input").val();

    $.ajax({
        url: "/test/process",
        type: "POST",
        dataType: "json",
        beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content"))},
        data: {"input" : input},
        success: function(response){
            console.log(response);
        }
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

控制器(不担心做任何事情input......只是想验证一个成功的帖子!):

def process(conn, %{"input" => input}) do
    IO.puts "got it!"
end
Run Code Online (Sandbox Code Playgroud)

和路由器:

post "/test/process", TestController, :process
Run Code Online (Sandbox Code Playgroud)

我几乎解除$.ajax了Rails应用程序的调用,它工作正常,但它不是在这里做的 - 运行它返回403错误和日志(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Request Forgery) token, make sure all requests include a valid '_csrf_token' …

ajax elixir-framework phoenix-framework

6
推荐指数
2
解决办法
2603
查看次数

凤凰频道[警告]忽略不匹配的主题“ topic:subtopic”-如何避免出现终端警告消息?

虽然运行凤凰聊天示例应用程序localhost,我们看到了这个“噪音”警告:

[warn] Ignoring unmatched topic "topic:subtopic" in ChatWeb.UserSocket

警告忽略未处理的主题

code/phoenix-chat-example $ mix phx.server [info] Running ChatWeb.Endpoint with Cowboy using http://0.0.0.0:4000 09:50:37 - info: compiled 6 files into 2 files, copied 3 in 1.7 sec [warn] Ignoring unmatched topic "topic:subtopic" in ChatWeb.UserSocket [info] JOIN "chat_room:lobby" to ChatWeb.ChatRoomChannel Transport: Phoenix.Transports.WebSocket (2.0.0) Serializer: Phoenix.Transports.V2.WebSocketSerializer Parameters: %{} [info] Replied chat_room:lobby :ok [debug] QUERY OK source="messages" db=5.9ms decode=7.3ms SELECT m0."id", m0."message", m0."name", m0."inserted_at", m0."updated_at" FROM "messages" AS m0 [] [warn] …

elixir websocket elixir-framework phoenix-framework phoenix-channels

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

如何将Elixir依赖项导入当前文件/模块

我正在尝试使用十六进制打包的CSV。

我将依赖添加到mix.exs中,如下所示:

  def application do
    [applications: [:logger, :csv]]
  end

  defp deps do
    [
      {:csv, "~> 1.4.2"}
    ]
Run Code Online (Sandbox Code Playgroud)

然后,我运行mix deps.getmix deps.compile在终端。

依赖文件夹显示在deps文件夹中。

在尝试使用依赖项之前,一切似乎都还不错。我收到此错误:

“未加载模块CSV,无法找到”

我试过一个简单的用途,而无需像这样导入:

File.stream!("data.csv") |> CSV.decode
Run Code Online (Sandbox Code Playgroud)

我试过像这样导入:

import(CSV)
File.stream!("data.csv") |> CSV.decode
Run Code Online (Sandbox Code Playgroud)

我试过为deps目录加上前缀:

import(deps.CSV)
File.stream!("data.csv") |> CSV.decode
Run Code Online (Sandbox Code Playgroud)

以及deps子目录的完整路径:

import(deps.csv.lib.csv.CSV)
File.stream!("data.csv") |> CSV.decode
Run Code Online (Sandbox Code Playgroud)

无论似乎没有找到依赖模块。

我想念什么?

elixir elixir-framework phoenix-framework

5
推荐指数
1
解决办法
583
查看次数

在凤凰城没有belongs_to的Ecto has_one

我有一个Home包含内容的主页,例如模型intro_copy,about_imageabout_copy.

Home模型上,我还希望能够Post使用has_one关系从我的模型中发布3个帖子.基本上只是使用id链接它们.

我的Home架构如下所示:

schema "home" do
  field :intro_copy, :string
  field :about_copy, :string
  field :about_image, Image.Type

  has_one :post_1, Post
  has_one :post_2, Post
  has_one :post_3, Post

  timestamps()
end
Run Code Online (Sandbox Code Playgroud)

我的changeset功能看起来像这样:

def changeset(struct, params \\ %{}) do
  struct
  |> cast_assoc(params, [:post_1, :post_2, :post_3])
  |> cast(params, @required_fields, @optional_fields)
end
Run Code Online (Sandbox Code Playgroud)

此外,在我的迁移中,我将以下行添加到:home表中:

add :post_1_id, references(:posts)
add :post_2_id, references(:posts)
add :post_3_id, references(:posts)
Run Code Online (Sandbox Code Playgroud)

有什么地方我明显错了吗?

elixir ecto elixir-framework phoenix-framework

5
推荐指数
1
解决办法
1853
查看次数

defimpl Phoenix.Param覆盖to_param导致(FunctionClauseError)在Phoenix.Param.Rumbl.Video.to_param/1中没有函数子句匹配

while试图按照编程凤凰(书)发布P1.0中的示例,
一切正常,直到第167页指示添加行:

defimpl Phoenix.Param, for: Rumbl.Video do
  def to_param(%{slug: slug, id: id}) do
    "#{id}-#{slug}"
  end
end
Run Code Online (Sandbox Code Playgroud)

至: rumbl/web/models/video.ex

在添加行之前,测试通过(按预期):https:
//travis-ci.org/dwyl/learn-phoenix-framework/builds/207894163#L384 测试通

但是一旦defimpl添加测试失败:https:
//travis-ci.org/dwyl/learn-phoenix-framework/builds/207901757#L349

试验,失败

两个失败测试的错误消息是:

** (FunctionClauseError) no function clause matching in Phoenix.Param.Rumbl.Video.to_param/1
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:https://travis-ci.org/dwyl/learn-phoenix-framework/builds/207901757#L349 图片

添加以下5行时的代码快照:https: //github.com/dwyl/learn-phoenix-framework/pull/42/commits/db72acbe83b184cd6ce3fe342ee51c3e39eb5de8

任何理解这一点的帮助将非常感谢!

注意:我已经尝试了谷歌搜索(一段时间)...
我已经阅读了SO和https://elixirforum.com上几十个类似的问题...
但没有一个是有帮助的.看来我是唯一一个看到这个错误的人!
在放弃编程之前发布StackOverflow问题是我的"最后手段"!:-(
帮助我obi-wan

在"编程凤凰"一书的勘误页面:https://pragprog.com/titles/phoenix/errata有另一个人报告相同代码的问题,但他们的错误是不同的...

勘误表,不是最相同

elixir web-development-server elixir-framework phoenix-framework

5
推荐指数
0
解决办法
277
查看次数