无法获得凤凰链接路由工作

时间:2017-05-03 16:19:08

标签: routes elixir phoenix-framework

我有一个'Radios'的模型,在我的主页上(template/page/index.html.eex)我正在拉最后一次录音。这样可以正常工作,但我正在努力让链接工作以进入该特定记录的显示页面(template/radio/show.html.eex)

在控制台中我得到:

== Compilation error on file web/controllers/radio_controller.ex ==
** (CompileError) web/controllers/radio_controller.ex:31: undefined function last_radio/0

很多关于使用@conn的例子:

<%= link "Show", to: radio_path(@conn, :show, radio), class: "button" %>

我尝试将此更改为我对last_radio

的查询

<%= link "Show", to: radio_path(@last_radio, :show, radio), class: "button" %>

但这不起作用。

也不是:

<%= link "Show", to: radio_path(@conn, :show, last_radio), class: "button" %>

radio_controller

defmodule Radios.RadioController do
  use Radios.Web, :controller

  alias Radios.Radio

  def index(conn, _params) do
    radios = Repo.all(Radio)
    render conn, "index.html"
  end

  def show(conn, %{"id" => id}) do
    radio = Repo.get!(Radio, id)
    render(conn, "show.html", radio: radio)
  end

page_controller

defmodule Radios.PageController do
  use Radios.Web, :controller

  alias Radios.Radio


  def index(conn, _params) do
    last_radio = Radio |> last |> Repo.one
    #|> Radio.sorted
    #|> Radios.Repo.one
    render(conn, "index.html", last_radio: last_radio)

  end
end

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果要在模板中使用控制器中的绑定,则需要在其前面添加@。因此,对于templates/radio/文件夹中的链接,请使用:

<%= link "Show", to: radio_path(@conn, :show, @radio), class: "button" %>

templates/page使用:

<%= link "Show", to: radio_path(@conn, :show, @last_radio), class: "button" %>

附加说明:

如果从模板渲染部分,则调用模板的绑定不会传递给部分。你需要自己处理它们。我添加了这个,这样可以节省你一些时间。

<%= render "my_partial", conn: @conn, radio: @radio %>