を置くために私は、コントローラで再利用したい共有コントローラ機能を持っている:どこに共有コントローラコード
def render_unprocessable_entity(conn, changeset) do
conn
|> put_status(:unprocessable_entity)
|> render(ExampleApp.ChangesetView, "error.json", changeset: changeset)
end
質問:私はこれを置くことができますか?私はコントローラ/ヘルパー/ controller_helper.exに入れようとしましたが、それはundefined function put_status/2
と書かれています。私はちょうどそれが既存のコントローラと競合するので、このヘルパーにuse ExampleApp.Web, :controller
を追加することはできません。私はそれを通常のモジュールとして使用してエイリアスを使用することができましたが、これはどこでもControllerHelper
の型指定です。
私はおそらくweb.exに入れることができますか?しかし、私はそのファイルを大きすぎないようにすべきでしょうか?
コードをDRYするにはどうすればよいですか?
申し訳ありませんが、私は十分にはっきりしませんでした。しかし、私は自分のコントローラーでその機能を使いたかったのですが、それを別のモジュールに入れて他のモジュールでインポート/使用できるようにしました。私はelixir内でルビモジュールのようなものを探していました。そこではヘルパーモジュールはモジュールを含むどのクラスにも定義されている既存のすべての関数にアクセスできます。例えば、 'has_many'や' attribute'メソッドもこれらのモジュールで使うことができます。 – randomor
単一のモジュールからそれを使用するすべてのモジュールにアクセスしたい場合は、['__using__'](http://elixir-lang.org/docs/stable/elixir/Kernel.html#use/2 )コールバックを呼び出すと、 'use Helper'を呼び出します。 – mudasobwa
ビンゴ!私はそれが私が必要としていたものだと思う。 ExampleApp.ChangesetView(>レンダリング| :|私は '' 'defmodule ExampleApp.ControllerHelper DO のdefmacro __using __(OPTS)を使用して終了 引用は defpのrender_unprocessable_entity(CONN、チェンジ)を行うのですか CONN を行う> put_status(unprocessable_entity) 、 "error.json"、changeset:changeset) end end end end ''私はあなたの答えを受け入れる前にこれをあなたの答えに追加しますか? – randomor