如何在html.exx文件上获取查询字符串值?

siv*_* rj 1 elixir phoenix-framework

我是phoenix,elixir的新人.我想在new.html.exx上的text_field上获取params [:task_id],类似于下面的rails代码.

<%= f.text_field :task_id, value: params[:task_id] %>
Run Code Online (Sandbox Code Playgroud)

我在iex shell上找到了以下信息

[info] GET /tasks/1/comments/new
[debug] Processing by HelloWorld.CommentController.new/2
Parameters: %{"task_id" => "1"}
Run Code Online (Sandbox Code Playgroud)

我尝试使用IEX.pry并得到以下结果,但我无法将其应用于text_input值.

pry(3)> conn.params["task_id"]
"1" 
Run Code Online (Sandbox Code Playgroud)

也尝试下面的代码,但没有运气.

<%= text_input f, :task_id, value: @conn.params["task_id"] %>
Got Error: assign @conn not available in eex template.
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢.

Dog*_*ert 7

您可以使用paramsavailable in @conn(可直接使用的所有模板中提供Phoenix.Controller.render).

# new.html.eex
<%= @conn.params["task_id"] %>
Run Code Online (Sandbox Code Playgroud)

如果要在主模板内使用@conn渲染的模板中使用Phoenix.View.render,则需要将其显式传递给新模板:

# new.html.eex
<%= render "form.html", ..., conn: @conn %>
Run Code Online (Sandbox Code Playgroud)

你也可以直接进入params:

# new.html.eex
<%= render "form.html", ..., params: @conn.params %>
Run Code Online (Sandbox Code Playgroud)

并使用@params:

# form.html.eex
<%= @params["task_id"] %>
Run Code Online (Sandbox Code Playgroud)