我一直在关注Programming Phoenix这本书。我从第六章“生成器和关系”开始,由于以下原因,我无法阅读本书
书中说要运行此命令
mix phoenix.gen.html Video videos user_id:references:users \
url:string title:string description:text
我在运行此命令时遇到问题,但是将其更改为
mix phoenix.gen.html Video Videos user_id :references: users url:string title:string description:text
有效(针对该步骤)
但是,除了在web / controllers,web / templates和web / views目录中创建所需的文件之外,它在lib目录中创建所有内容(如下面的屏幕快照1所示)
然后,当我在遵循第95页的书后运行mix ecto.migrate命令时,在/lib/rumbl_web/controllers/video_controller.ex第22行中出现了videos_path / 3函数未定义的错误,如屏幕快照2所示
第22行是这样
redirect(to: videos_path(conn, :show, videos))
在video_controller.ex内部
,完整文件如下:
defmodule RumblWeb.VideosController do
use Rumbl.Web, :controller
alias Rumbl.Video
alias Rumbl.Video.Videos
def index(conn, _params) do
user_id = Video.list_user_id()
render(conn, "index.html", user_id: user_id)
end
def new(conn, _params) do
changeset = Video.change_videos(%Videos{})
render(conn, "new.html", changeset: changeset)
end
def create(conn, %{"videos" => videos_params}) do
case Video.create_videos(videos_params) do
{:ok, videos} ->
conn
|> put_flash(:info, "Videos created successfully.")
|> redirect(to: videos_path(conn, :show, videos))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
def show(conn, %{"id" => id}) do
videos = Video.get_videos!(id)
render(conn, "show.html", videos: videos)
end
def edit(conn, %{"id" => id}) do
videos = Video.get_videos!(id)
changeset = Video.change_videos(videos)
render(conn, "edit.html", videos: videos, changeset: changeset)
end
def update(conn, %{"id" => id, "videos" => videos_params}) do
videos = Video.get_videos!(id)
case Video.update_videos(videos, videos_params) do
{:ok, videos} ->
conn
|> put_flash(:info, "Videos updated successfully.")
|> redirect(to: videos_path(conn, :show, videos))
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "edit.html", videos: videos, changeset: changeset)
end
end
def delete(conn, %{"id" => id}) do
videos = Video.get_videos!(id)
{:ok, _videos} = Video.delete_videos(videos)
conn
|> put_flash(:info, "Videos deleted successfully.")
|> redirect(to: videos_path(conn, :index))
end
end
我无法获得它,因为我是凤凰和长寿药的新手。 有人可以帮我解决我哪里出了问题以及如何解决该问题。
答案 0 :(得分:2)
您的问题是使用不同版本Phoenix上的函数。这来自阅读Programming Phoenix的旧版本书(现在最新版本为1.4,该版本针对Phoenix 1.4进行了更新)。您应该阅读最新的书以学习最新的Phoenix。
1.3.0使用phx。所有生成器上的前缀。尽管旧的发电机仍在附近,但给社区和学习资源提供了赶上的时间。 ?它们将在1.4.0上删除
这是原因:
根据屏幕快照1中的项目结构,您可以使用来启动项目
mix phx.new rumbl
但是在那之后,旧功能的书指南
mix phoenix.gen.html
这会导致所有问题。
第一个问题:\表示代码在同一行
mix phoenix.gen.html Video videos user_id:references:users \
url:string title:string description:text