Phoenix 1.3中的友好URL未定义错误

时间:2017-06-04 14:59:31

标签: elixir phoenix-framework friendly-url

我尝试根据以下指南https://elixircasts.io/seo-friendly-urls-with-phoenix在我的应用中实施友好网址 从帖子标题确定数据库中创建了slug,但是在查找slug时我无法显示帖子并得到以下错误:

function Driverless.Articles.get_by!/2 is undefined or private

post_controller.ex

...
  def show(conn, %{"id" => id}) do
    post = Articles.get_by!(Post, slug: id)
    render(conn, "show.html", post: post)
  end
...

post.ex

...
  def changeset(%Post{} = post, attrs) do
    attrs = Map.merge(attrs, slug_map(attrs))
    post
    |> cast(attrs, [:title, :snippet, :body, :slug])
    |> validate_required([:title, :snippet, :body])
  end

  defp slug_map(%{"title" => title}) do
    slug = String.downcase(title) |> String.replace(" ", "-")
    %{"slug" => slug}
  end
  defp slug_map(_attrs) do
    %{}
  end
...

我确定某处有一个小错误,但无法发现它。

1 个答案:

答案 0 :(得分:0)

刚刚解决了这个问题:

与Elixir演员表中的原始示例不同,我们将post控制器保留为:

  def show(conn, %{"id" => id}) do
    post = Articles.get_post!(id)
    render(conn, "show.html", post: post)
  end

我刚刚改变了:

<强> articles.ex

自:

def get_post!(id), do: Repo.get!(Post, id)

def get_post!(id), do: Repo.get_by!(Post, slug: id)