我知道可以创建一个struct via %User{ email: 'blah@blah.com' }.但是,如果我有一个变量params = %{email: 'blah@blah.com'},有一种方法可以使用该变量创建该结构,例如,%User{ params }.
这给出了一个错误,只是想知道你是否可以爆炸它或其他方式?
我需要关于灵药理解下面的语法帮助!,?,_,和..elixir函数中的语法角色是什么?例如Repo.get!.
我不确定它们只是函数名称,还是有角色.虽然我知道.是为了调用匿名函数.而_对于任何一个或可变参数?
我正在尝试使用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) 我有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没有副作用的原则是值得的.但是,大型地图不会造成巨大的重复效率低下吗?
在此先感谢您的帮助.
我正在学习使用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' …
虽然运行在凤凰聊天示例应用程序上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
我正在尝试使用十六进制打包的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.get和mix 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)
无论似乎没有找到依赖模块。
我想念什么?
我有一个Home包含内容的主页,例如模型intro_copy,about_image和about_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)
有什么地方我明显错了吗?
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问题是我的"最后手段"!:-(
在"编程凤凰"一书的勘误页面:https://pragprog.com/titles/phoenix/errata有另一个人报告相同代码的问题,但他们的错误是不同的...

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