Elixir 插入一条记录给出未定义的方法
Elixir insert a record gives undefined method
我正在尝试执行 :create
操作。这是我的代码库。
defmodule Rumbl.Repo do
use Ecto.Repo, otp_app: :rumbl
end
对于 User.ex
模型
defmodule Rumbl.User do
use Rumbl.Web, :model
schema "users" do
field :name, :string
field :username, :string
field :password, :string, virtual: true
field :password_hash, :string
timestamps()
end
def changeset(model, params \ :empty) do
model
|> cast(params, ~w(name username), [])
|> validate_length(:username, min: 1, max: 20)
end
end
我的控制器:
defmodule Rumbl.UserController do
use Rumbl.Web, :controller
alias Rumbl.Repo
alias Rumbl.User
require Logger
def new(conn, _params) do
changeset = User.changeset(%User{})
render conn, "new.html", changeset: changeset
end
def create(conn, %{"user" => _params}) do
changeset = User.changeset(%User{}, _params)
case Repo.insert changeset do
{:ok, user} ->
conn
|> put_flash(:info, "#{user.name} created!")
|> redirect to: user_path(conn, :index)
{:error, changeset} ->
render conn, "new.html", changeset: changeset
end
end
def index(conn, _params) do
users = Repo.all(User)
render conn, "index.html", users: users
end
def show(conn, %{"id" => id}) do
user = Repo.get(User, String.to_integer(id))
render conn, "show.html", user: user
end
end
一旦我 运行 我的 phoenix 服务器打开新页面,当我发送请求时它给我一个错误:
函数 Rumbl.Repo.insert/1 未定义或私有
我错过了什么?
我误解了 Elixir 中的下划线功能。实际上要解决我必须写的问题
sef create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert changeset do
{:ok, user} ->
conn
|> put_flash(:info, "#{user.name} created!")
|> redirect to: user_path(conn, :index)
{:error, changeset} ->
render conn, "new.html", changeset: changeset
end
end
我正在尝试执行 :create
操作。这是我的代码库。
defmodule Rumbl.Repo do
use Ecto.Repo, otp_app: :rumbl
end
对于 User.ex
模型
defmodule Rumbl.User do
use Rumbl.Web, :model
schema "users" do
field :name, :string
field :username, :string
field :password, :string, virtual: true
field :password_hash, :string
timestamps()
end
def changeset(model, params \ :empty) do
model
|> cast(params, ~w(name username), [])
|> validate_length(:username, min: 1, max: 20)
end
end
我的控制器:
defmodule Rumbl.UserController do
use Rumbl.Web, :controller
alias Rumbl.Repo
alias Rumbl.User
require Logger
def new(conn, _params) do
changeset = User.changeset(%User{})
render conn, "new.html", changeset: changeset
end
def create(conn, %{"user" => _params}) do
changeset = User.changeset(%User{}, _params)
case Repo.insert changeset do
{:ok, user} ->
conn
|> put_flash(:info, "#{user.name} created!")
|> redirect to: user_path(conn, :index)
{:error, changeset} ->
render conn, "new.html", changeset: changeset
end
end
def index(conn, _params) do
users = Repo.all(User)
render conn, "index.html", users: users
end
def show(conn, %{"id" => id}) do
user = Repo.get(User, String.to_integer(id))
render conn, "show.html", user: user
end
end
一旦我 运行 我的 phoenix 服务器打开新页面,当我发送请求时它给我一个错误:
函数 Rumbl.Repo.insert/1 未定义或私有
我错过了什么?
我误解了 Elixir 中的下划线功能。实际上要解决我必须写的问题
sef create(conn, %{"user" => user_params}) do
changeset = User.changeset(%User{}, user_params)
case Repo.insert changeset do
{:ok, user} ->
conn
|> put_flash(:info, "#{user.name} created!")
|> redirect to: user_path(conn, :index)
{:error, changeset} ->
render conn, "new.html", changeset: changeset
end
end