2016-01-02 28 views

回答

6

不知道這是否是你所要求的,但是在這裏你去:

router.ex在瀏覽器堆棧

get "/products/:product_name", ProductController, :get_product_by_name 

product_controller.ex

def get_product_by_name(conn, %{"product_name" => product_name}) do 
    product = Repo.get_by(Product, name: product_name) 
    render(conn, "product_info.html", product) 
end 

這應該是如果您希望應用程序根據名稱返回特定的產品作爲html頁面,那麼您需要的全部內容,自然需要在templates/produc下有一個名爲「product_info.html.eex」的html頁面t

19

除了Wobbley的迴應之外,Phoenix中的to_param也是通過協議實現的。例如,這裏是你如何可以改變如何產生產品的URL:

defimpl Phoenix.Param, for: MyApp.Product do 
    def to_param(%{name: name}) do 
    "#{name}" 
    end 
end 

更復雜的例子也顯示在Programming Phoenix(免責聲明:我是作者之一)。

+3

但由phoenix(v1.2.rc)生成的寧靜路線仍然使用:id作爲默認參數名稱,您需要使用顯式設置參數。例如'resources/users「,UserController,param:」name「' –

+2

另外,請看文檔:https://hexdocs.pm/phoenix/Phoenix.Param.html。該協議是可推導的,所以在'schema'調用之前在您的模型中添加'@derive {Phoenix.Param,key::product_name}'就足以在不修改模板的情況下生成適用於網絡的網址(僅限於如何檢索記錄控制器)。 – Eloici

相關問題