Возможно, это не вопрос о хлебной крошке, но как передать параметр из предыдущего плагина в хлебную крошку? Например, если в предыдущем плагине set_merchant продавец включил conn.params.merchant, как я могу передать этот id в хлебную крошку?

   plug :set_merchant
   plug :add_breadcrumb, name: "Dashboard", url: "/dashboard/#{conn.params.merchant_id}"

.....

 defp set_merchant(conn, _opt) do
    case conn.params do
      %{"merchant_id" => merchant_id} ->
        case MyApp.find_merchant(merchant_id) do
          nil ->
            conn |> redirect(to: "/dashboard/#{merchant_id}") |> halt
          merchant ->
            assign(conn, :merchant, merchant)
        end
      _ ->
        conn |> redirect(to: "/") |> halt
    end
  end

conn.params.merchant_id - это то место, где я хотел бы передать параметр из первого плагина set_merchant

0
DogEatDog 2 Янв 2018 в 19:43

2 ответа

Лучший ответ

Вы можете вызвать

Вы можете передать столько параметров, сколько хотите, как вы это уже сделали с функцией Plug.Conn.assign/3.

Самое простое решение для вас - сделать что-то вроде этого в вашем case:

case MyApp.find_merchant(merchant_id) do
  nil ->
    conn 
    |> redirect(to: "/dashboard/#{merchant_id}") 
    |> halt()
  merchant ->
    conn
    |> assign(:merchant, merchant)
    |> assign(:merchant_id, merchant_id) # this is what you asked for
end

Тогда вы не будете вызывать свой plug, добавляя этот url с merchant_id, потому что соединение уже будет иметь его, потому что set_merchant предоставит его вам.

Также еще вариант:

Если вы не хотите, чтобы там был merchant_id, вы можете просто получить его из merchant, выполнив:

merchant_id = conn.assigns.merchant.id

Вы должны отличать params от assigns. Не знаю, как получить merchant, но запомните это быстро:

  • params приходят извне, например POST-запрос, строки запроса и т. Д.
  • assigns устанавливаются вами или кем-либо еще, кто изменил Plug.Conn с помощью функции assign/3
2
PatNowak 2 Янв 2018 в 16:48