Нет абсолютно никакой разницы, куда вы помещаете функцию.Функции в Elixir полностью не сохраняют состояния (и не существует иерархий классов), то есть они могут быть вставлены буквально в любой модуль (если вызывающая точка может получить доступ к этому модулю, что будет нормой, если вы неИспользуешь зонтики).
Во-вторых, когда вы обнаружите, что нуждаетесь в функции как в контроллере, так и в представлении (и даже в шаблоне), это явный признак , вы делаете это неправильно .Диким предположением было бы то, что вы хотите использовать contextxts .
Я мог бы объяснить, почему он «работает не так, как ожидалось», и что вызывает эту ошибку, если у вас была ошибкасообщение или как сообщение.Я ожидаю, что проблема связана с board_thread_path/4
, который вводится одним из ваших use Blah
в вашей модели (?).Я понятия не имею, вводится ли это публично или в частном порядке.Если публично, просто назовите его, используя полное имя:
def post_path(conn, action, post) do
path = MyApp.MyModule.board_thread_path(conn, action, post.board.path, post)
if Post.thread?(post),
do: path, else: path <> "#post-#{post.number}"
end
Если конфиденциально, оберните его в общедоступное (помните: это, вероятно, неправильный подход) и вызовите новую функцию-обертку полностьюквалифицированное имя отовсюду.
Чтобы избежать FQ-имен, можно использовать Kernel.SpecialForms.import/2
.