缺少模型之间的ecto关联

Hen*_*que 5 erlang elixir ecto phoenix-framework

我正在跟随Chris McCord的"Programming Phoenix"一书,在第6章中,a User和a 之间建立了一种关系Video.

尝试运行时mix phoenix.server,会出现以下错误:

Request: GET /manage/videos
** (exit) an exception was raised:
    ** (ArgumentError) schema Rumbl.User does not have association :videos
        (ecto) lib/ecto/association.ex:121: Ecto.Association.association_from_schema!/2
Run Code Online (Sandbox Code Playgroud)

通过本书的勘误表,有另一位用户的评论提到这是因为登录用户没有任何与之相关的视频.

以下是内容 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(user, params \\ :empty) do
        user
        |> cast(params, ~w(name username), [])
        |> validate_length(:username, min: 1, max: 20)
    end

    def registration_changeset(user, params) do
        user
        |> changeset(params)
        |> cast(params, ~w(password), [])
        |> validate_length(:password, min: 6, max: 100)
        |> put_pass_hash()
    end

    def put_pass_hash(changeset) do
        case changeset do
            %Ecto.Changeset{valid?: true, changes: %{password: pass}} ->
                put_change(changeset, :password_hash, Comeonin.Bcrypt.hashpwsalt(pass))
                _-> changeset
        end
    end
end 
Run Code Online (Sandbox Code Playgroud)

我怎样才能优雅地处理这个案子?

Dog*_*ert 8

你忘了添加has_many :videos, Rumbl.Video里面schema "users"web/models/user.ex:

schema "users" do
  # ...
  has_many :videos, Rumbl.Video
  # ...
end
Run Code Online (Sandbox Code Playgroud)

如第6章(p1_0 PDF的第100页)和此代码段中所述.