在phoenix框架中使用scrivener删除表单请求后,如何重定向回当前页面

时间:2018-10-12 18:38:39

标签: elixir phoenix-framework

我在phoenix框架中使用scrivener_ecto和scrivener_html。 我有一个包含300个联系人的联系人列表。 当我单击第6页的“删除联系人”时,提交删除后,我将重定向到联系人列表的第一页。 删除后,我想停留在当前页面(如第6页)。我该怎么办?

我试图从删除控制器获取参数信息,但是它没有我尝试过的页面信息(查询参数)

IO.inspect conn.query_string

,但返回“” 这是person_controller.ex

中的删除操作
  def action(conn, _) do
    user = conn.assigns.current_user
    phonebook = Contact.get_phonebook!(conn.params["phonebook_id"], user.id)
    arg_list = [conn, conn.params, phonebook]
    apply(__MODULE__, action_name(conn), arg_list)
  end

  def delete(conn, %{"id" => id}, phonebook) do
    person = Contact.get_person!(id, phonebook.id)
    {:ok, _person} = Contact.delete_person(person)

    conn
    |> put_flash(:info, "Contact deleted successfully.")
    |> redirect(to: phonebook_path(conn, :show, phonebook))
  end

在模板中

<%= button to: phonebook_person_path(@conn, :delete, @phonebook.id, person.id), method: "delete", data: [confirm: "Are you sure?"], class: "btn btn-danger" do %><i class="material-icons icon-button">close</i><% end %>

1 个答案:

答案 0 :(得分:1)

您可以在模板中再次传递页码:

<%= button to: phonebook_path(@conn, :delete, phonebook.id, person.id, page: @conn.params["page"]) %>

然后将其传播回show中的delete操作:

conn
|> put_flash(:info, "Contact deleted successfully")
|> redirect(to: phonebook_path(conn, :show, phonebook, page: conn.params["page"]))