2015-10-05 25 views
5

Sto cercando di imparare Phoenix e mi sono imbattuto in una domanda. In Rails potrei direCome chiamare le funzioni da un file .eex

<%= Rails.version %> 

per visualizzare la versione corrente di rotaie visualizzata in un file .erb. Ho chiesto come fare questo a Phoenix, ed ha ottenuto la risposta

:application.get_key(:phoenix, :vsn) 

Purtroppo, questo mette in evidenza la mia ignoranza come cerco di rampa con Phoenix. Quando ho messo

<%= :application.get_key(:phoenix, :vsn) %> 

nel mio file .eex, ottengo

no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata/1 

favore mi indichi alcuna documentazione che mi aiutano a imparare che cosa provare dopo. Grazie!

risposta

8

Il :application.get_env chiamata restituisce una tupla nel formato:

{:ok, '1.0.0'} 

Phoenix.HTML.Safe non ha una funzione di decodificare una tupla in questo formato (source). Sarà necessario estrarre la versione dalla chiamata:

<%= :application.get_key(:phoenix, :vsn) |> elem(1) %> 

Tuttavia un modo migliore sarebbe quella di utilizzare una funzione di supporto:

defmodule VersionHelper do 
    def version do 
    case :application.get_key(:phoenix, :vsn) do 
     {:ok, vsn} -> vsn 
     _   -> #raise or return null or something else 
    end 
    end 
end 

Questo può quindi essere chiamato alla tua vista con VersionHelper.version - questo significa che il tuo recupero della versione non è legato alla chiave che Phoenix usa nella vista.

+0

Grazie! Apprezzo il vostro aiuto. –