:Rubyでbefore_action:フェニックスのセットアップ同等の私は、このコントローラーを乾燥させるためにしたいと思い
product = Shops.get_product!(id)
tax = product.price * 0.15
私は思いRailsの世界に:すべての関数はこの部分で始まる
defmodule Xyz.ExampleController do
use Xyz, :controller
alias XyZ.Shops
def a(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "a.html", foobar: foobar, product: product)
end
def b(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "b.html", foobar: foobar, tax: tax)
end
def c(conn, %{"id" => id}) do
product = Shops.get_product!(id)
tax = product.price * 0.15
...
render(conn, "c.html", foobar: foobar)
end
end
コントローラーをDRYするにはbefore_action :setup
と呼ばれるメソッドを置きます。
フェニックスでDRYを達成する最良の方法は何ですか?
プラグイン - > https://hexdocs.pm/phoenix/plug.htmlを使用できます。私はあなたに頼んで、ビジネスロジックをフレームワークモジュールに入れないでください。 – JustMichael
このロジックはコントローラのIMOにあってはなりません。それが私だったら、 '{product、tax} = Shops.get_product_and_tax!(id)'のように動作する関数を定義し、それを各アクションから呼び出します。 – Dogbert
それよりもやるよ。私はそれをプラグに入れるのがよりクリーンであると思った。しかし、私は各アクションに1行のコードを残しておきます。 – wintermeyer