簡體   English   中英

如何獲取html.exx文件上的查詢字符串值?

[英]How to get query string value on html.exx file?

我是鳳凰城的長生不老葯。 我正在嘗試在new.html.exx的text_field上獲取params [:task_id],類似於在rails代碼下面。

<%= f.text_field :task_id, value: params[:task_id] %>

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

[info] GET /tasks/1/comments/new
[debug] Processing by HelloWorld.CommentController.new/2
Parameters: %{"task_id" => "1"}

我嘗試使用IEX.pry並得到以下結果,但是我無法將其應用於text_input值。

pry(3)> conn.params["task_id"]
"1" 

也嘗試下面的代碼,但沒有運氣。

<%= text_input f, :task_id, value: @conn.params["task_id"] %>
Got Error: assign @conn not available in eex template.

任何幫助,將不勝感激。 謝謝。

您可以使用@conn可用的params副本(在所有直接使用Phoenix.Controller.render渲染的模板中都可用)。

# new.html.eex
<%= @conn.params["task_id"] %>

如果要在主模板中使用Phoenix.View.render渲染的模板中使用@conn ,則需要將其顯式傳遞給新模板:

# new.html.eex
<%= render "form.html", ..., conn: @conn %>

您也可以只傳遞params

# new.html.eex
<%= render "form.html", ..., params: @conn.params %>

並使用@params

# form.html.eex
<%= @params["task_id"] %>

根據注釋,您似乎正在使用Ecto和Changesets。

給定一些模式

schema "foo" do
  field :name, :string
  field :age, :integer
end

您可以在控制器中添加類似的內容

def new(conn, _params) do
  changeset = Foo.changeset(%Foo{})
  render conn, "new.html", changeset: changeset
end

這將使您在html視圖文件中具有類似的內容。

= form_for @changeset, foo_path(@conn, :create), [as: :foo], fn f ->
  = text_input f, :name
  = number_input f, :age
  = submit "Submit"
- end

然后返回到您的控制器以創建方法

def create(conn, %{"foo" => foo_params}) do
  foo = Foo.changeset(%Foo{}, foo_params)

  case Repo.insert(foo) do
    {:ok, foo} -> redirect conn, to: foo_path(:show, foo)
    {:error, changeset} -> render conn, "new.html", changeset: changeset
  end
end

根據您的需要,邏輯可能會有所不同,但是您可以利用變更集為您填寫表格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM