2017-02-09 52 views
1

我正在尝试执行:create操作。这是我的代码库。Elixir插入记录给出了未定义的方法

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 

有一次,我跑我的凤凰服务器时,它会打开新的一页,当我发送一个请求,它给了我一个错误:

函数Rumbl.Repo.insert/1未定义或私人

我错过了什么?

+0

你可以尝试使用'Repo.insert(变更)',而不是'Repo.insert changeset'(注意额外的括号)。 –

+0

@JustinWood我怀疑这是重要的,因为错误信息清楚地表明它识别出'Rumbl.Repo.insert/1'的arity。 – mudasobwa

+0

我同意,但从提供的代码,我看不到任何不妥。 –

回答

0

我误解了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 
相关问题