database - 创建phoenix表单并提交时出错
问题描述
我是凤凰和长生不老药的新手。尝试创建表单以将 1 个句子提交到数据库中,单击提交表单时出现错误。顺便提一句。我正在学习一些课程,我很困惑。有代码 Opa_Controller.ex
defmodule Test.OpaController do
use Test.Web, :controller
alias Test.Opa
def new(conn,_params) do
struct = %Test.Opa{}
params = %{}
changeset = Test.Opa.changeset(struct,params)
render conn, "sex.html", changeset: changeset
end
def create(conn,%{"naziv" => naziv}) do
changeset = Opa.changeset(%Opa{}, naziv)
case Repo.insert(changeset) do
{:ok, post} -> IO.inspect(post)
{:error, changeset} -> IO.inspect(changeset)
end
end
end
测试.ex
defmodule Test.Opa do
use Test.Web, :model
schema "opala" do
field :naziv, :string
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:naziv])
|> validate_required ([:naziv])
end
end
html文件
<%= form_for @changeset, opa_path(@conn, :create), fn f -> %>
<%= text_input f, :naziv, placeholder: "naziv" %>
<%= submit "Save Topic" %>
<% end %>
路由器.ex
get "/", PageController, :index
get "/opa/new", OpaController, :new
get "/hello", HelloController, :index
post "/opa", OpaController, :create
在终端我得到
[debug] ** (Phoenix.ActionClauseError) could not find a matching Test.OpaController.create clause
to process request. This typically happens when there is a
parameter mismatch but may also happen when any of the other
action arguments do not match. The request parameters are:
%{"_csrf_token" => "BDgWfgElRhRdSgoFBTo0BF4+P1YXNgAAtANQOf4Fi+GIlpej+Mt1eg==", "_utf8" => "✓", "opa" => %{"naziv" => "sa"}}
解决方案
create 操作需要一个顶级 map key "naziv"
,从函数定义中可以看出:
def create(conn,%{"naziv" => naziv}) do
发送到控制器操作的参数(如错误消息中所示)是:
%{
"_csrf_token" => "BDgWfgElRhRdSgoFBTo0BF4+P1YXNgAAtANQOf4Fi+GIlpej+Mt1eg==",
"_utf8" => "✓",
"opa" => %{"naziv" => "sa"}
}
如我们所见,"naziv"
嵌套在顶级"opa"
键下。
我们真正想要克服的是改变 create 函数中的模式匹配,以便它需要一个顶级"opa"
键:
def create(conn,%{"opa" => opa_params}) do
changeset = Opa.changeset(%Opa{}, opa_params)
case Repo.insert(changeset) do
{:ok, post} -> IO.inspect(post)
{:error, changeset} -> IO.inspect(changeset)
end
end
推荐阅读
- python-3.x - 将嵌套查询从 GraphQL 转换为 Graphene 不起作用
- flutter - 使用 gradle 编译颤振 apk 时,默认情况下库不能选择退出 null 安全性
- android - Flutter:JAVA_HOME 设置为无效目录
- python - 如何快速生成随机排列以小于 K 的距离移动每个元素?
- python - 如何从字典列表中创建 Pandas 系列列表?
- python - Python以二进制打印浮点数?
- javascript - 命令应该在调用命令后删除作者的消息,而是垃圾邮件聊天 [discord.js]
- c++ - 使用 basic_ofstream 写入字节数据序列
- python - Tweepy 流式传输错误,从用户目标中删除推文后收到通知错误“id”
- c# - 将分隔字符串数组转换为 ValueTuple 列表