【问题标题】:Phoenix pattern match in controller控制器中的凤凰模式匹配
【发布时间】:2017-08-02 04:34:17
【问题描述】:

我想在我的控制器中有 2 个索引函数,一个如果有带有 id 的调用,一个如果有一个带有搜索查询字符串的 id。由于某种原因,第二个函数永远不会被调用。

curl localhost:4000/something/15
curl localhost:4000/something/15?search=bob

def index(conn, %{"id" => id}) do
end

def index(conn, %{"id" => id}, "search" => search }) do
end

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    因为匹配从顶部开始。如果 id 匹配,则从不检查搜索。 您应该将更常见的情况放在底部,并将更具体的情况放在顶部。

    def index(conn, %{"id" => id}, "search" => search }) do
    end
    
    def index(conn, %{"id" => id}) do
    end
    

    也许您也应该将 GET 参数包装到地图中,我不确定。我想这是一个语法错误:

    search }) do
    

    【讨论】:

    • “你应该把更常见的情况放在底部,更具体的放在顶部”是模式匹配时要遵循的词。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多