2017-02-01 1 views
0

Почему я получаю эту ошибку при попытке добавить параметр в метод render/2 view.Phoenix Views - добавление опций arg to View render/2, Issue with overriding render/3

def render("show.json", %{post: post}), do: render("show.json", %{post: post}, [user: true, room: true]) 
def render("show.json", %{post: post}, opts) do 
    %{ 
    # stuff 
    user: if(Keyword.fetch!(opts, :user), do: render_one(post.user, App.UserView, "show.json"), else: nil), 
    } 
end 

Ошибка:

imported Phoenix.View.render/3 conflicts with local function 

Я предполагаю, что если я конфликтует с функцией импортирования, что это плохо, что нужно сделать. Есть ли лучший способ передать параметры, или я могу как-то исправить это по-другому?

+1

Можете ли вы показать весь модуль? Я получаю сообщение об ошибке «def render/3 defaults conflict with def render/2», когда я делаю то же самое. –

+0

@JustinWood Я обновил код. На самом деле я не использую параметры по умолчанию, вместо двух методов. См. Выше –

ответ

1

В Elixir вы можете иметь функции с тем же именем, но различную arity в разных модулях. Вот почему в наших представлениях мы можем определить функции, называемые render, с арностью 2. render/2 - это соглашение Эрланга и Эликсира для показа этого.

С учетом этого Phoenix.View определяет функцию render/3. Которая импортируется во всех представлениях. Поэтому компилятор Elixir видит, что вы определяете функцию с тем же именем и arity как функцию, которая импортируется в модуль и жалуется.

Единственное реальное решение здесь - не называть вашу функцию render. Предлагаемое имя может быть render_with_options.