我想干掉这个控制器:
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
每个函数都从这一部分开始:
product = Shops.get_product!(id)
tax = product.price * 0.15
在Ruby on Rails世界中,我给它设置了一个方法,用before_action :setup
调用来干掉控制器。
在凤凰城实现干涸的最佳途径是什么?
答案 0 :(得分:1)
您可以尝试使用action/2
控制器方法。来自controller docs:
由于控制器是插件,它们实现init / 1和call / 2,以及 它还提供了一个名为action / 2的函数 在插件堆栈之后调度适当的操作(也是 可重写)。
在书中Programming Phoenix
Chris McCord使用此操作为所有控制器函数添加一个公共参数,如下所示:
def action(conn, _) do
apply(__MODULE__, action_name(conn), [conn, conn.params, conn.assigns.current_user])
end
因此,index/2
等所有操作现在都是index/3
,并将当前用户作为第三个参数。
也许这可以帮到你?