2016-04-09 11 views
2

ランダムに着信要求をルーティングしたい。Phoenixフレームワークのランダムルーター

は、これまでのところ、私はこれだけを作ってみた:

defmodule Test.PageController do 
    use Test.Web, :controller 

    plug :assign_random_number 

    def index(%{assigns: %{random_number: random_number}} = conn, _params) 
    when random_number > 0.1 do 
    render conn, "index.html", fortune: "one" 
    end 
    def index(conn, _params) do 
    render conn, "index.html", fortune: "two" 
    end 

    defp assign_random_number(conn, _params) do 
    :random.seed(:erlang.now) 
    assign(conn, :random_number, :random.uniform) 
    end 
end 

それはrouter.exで、この「ランダム化」のロジックを持つことは可能ですか? Sinatraのように

get "/", :random_number > 0.1 do 
    "one" 
end 

get "/" do 
    "two" 
end 

答えて

1

ルーティングレベルでElixirで行うことはできません(そうすべきではありません)。実際、シナトラでもそれをすることはできません!あなたが投稿したコードは無効ルビーです:私たちが扱うために私たちの応答/コントローラ層に依存している

get "/" do      # <- Routing layer 
    rand > 0.1 ? 'one' : 'two'  # <- Response/controller layer 
end 

注:

ここ
get "/", :random_number > 0.1 do 
    "one" 
end 
# => ArgumentError: comparison of Symbol with 0.1 failed 

は、あなたが実際にシナトラでこれを実現したいhow'dですランダム化。エリクサーでも同様のことができます:

defmodule Test.PageController do 
    use Test.Web, :controller 

    def index(conn, _params) do 
    render conn, "index.html", fortune: make_fortune 
    end 

    defp make_fortune do 
    if :random.uniform > 0.1, do: "one", else: "two" 
    end 
end 
関連する問題