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)
我怎样才能优雅地处理这个案子?
你忘了添加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页)和此代码段中所述.