2016-01-02 7 views
8

phoenixアプリケーションで固定リンクを実装しようとしています。phoenixフレームワーク(エリクシル)の代わりに文字列を受け入れるためにURLを変更する

目標はlocalhostを変更することです:ローカルホストに4000 /製品/ 1:4000 /製品/ PRODUCTNAME

私はpermalinks implementation in rails に、次のライアンベイツエピソードを試みたが、中のモデルのto_param機能を見つけることができませんでしたフェニックス。

助けてください。

答えて

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

フェニックスのto_paramは、Wobbleyの応答に加えて、プロトコルで実装されています。

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

より複雑な例

Programming Phoenixに示されている(免責事項:私は著者の一人です)たとえば、ここにあなたが製品のURLが生成されている方法を変更することができる方法です。

+3

しかし、phoenix(v1.2.rc)によって生成された安らかなルートは、デフォルトのparam名としてIDを使用しています。明示的なset paramを使用する必要があります。 UserController、param: "name" ' –

+2

また、docs:https://hexdocs.pm/phoenix/Phoenix.Param.htmlを見てください。このプロトコルは導出可能ですので、 'schema'呼び出しの前にあなたのモデルに' @derive {Phoenix.Param、key::product_name} 'を追加すると、テンプレートを変更せずに親しみやすいURLを生成すれば十分です。コントローラ)。 – Eloici

関連する問題