Возможно, это не вопрос о хлебной крошке, но как передать параметр из предыдущего плагина в хлебную крошку? Например, если в предыдущем плагине 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
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
Похожие вопросы
Новые вопросы
elixir
Elixir - это динамический, скомпилированный универсальный функциональный язык программирования с открытым исходным кодом. Он был разработан для полной совместимости с платформой Erlang и хорошо подходит для написания отказоустойчивых распределенных приложений с мягкими гарантиями реального времени и возможностью горячей замены кода.