2016-11-28 5 views
1

私は__using__マクロアクションにこれを追加したときに、いくつかのbase_controller.exに混合に入れるために、私は希望のプラグが、しかしすなわちカント使用プラグ

plug :xxx when action in [:xxx]

があるので、鳳凰

unknown variable action or cannot invoke local action/0 inside guard

:中すなわち

defmacro __using__(opts) do 
    quote do 
    use XXX.Web, :controller 
    plug :xxx when action in [:xxx] 
    end 
end 

結果を未定義ているように見えます

アクションのようですが、use XXX.Web, :controllerから来ています。なぜ私はそれが未定義であるかはわかりません。ここにどんなアイデア?

クリス

答えて

2

エラーメッセージがより良いかもしれないが、これが原因マクロplugに送信する前にactionの名前を変更されたマクロ衛生、にあると思われます。変数actionの衛生状態を無効にするには、Kernel.var!/1を使用します。以下は私のために働く:

quote do 
    use XXX.Web, :controller 
    plug :xxx when var!(action) in [:xxx] 
end