2017-01-02 2 views
0

Я пытаюсь проверить user_id на id ресурса в моей функции elixir, но я новичок в этом языке, и я не знаю, знаю, почему я получаю эту ошибку web/controllers/admin/project_controller.ex:12: undefined function resource/0web/controllers/admin/project_controller.ex: 12: undefined function resource/0 - elixir

Вот мой код:

def index(conn, %{"user_id" => user_id}) do 
    user = Repo.get(User, user_id) 
      |> Repo.preload(:projects) 
    cond do 
     resource = Guardian.Plug.current_resource(conn) && user.id == resource.id -> 
     conn 
     |> render("index.html", projects: user.projects, user: user) 
     :error -> 
     conn 
     |> put_flash(:info, "No access") 
     |> redirect(to: session_path(conn, :new)) 
    end 
    end 

Могу ли я на самом деле установка ресурса к значению Guardian.Plug.current_resource(conn) или в том, что не работает, как эликсир. Я немного смущен.

+2

Где вы получаете 'resource.id' от этой линии' ресурс = Guardian.Plug.current_resource (Conn) && пользователя. id == resource.id -> '? Кроме того, в этой строке структуры управления 'cond' вы не можете привязать/сопоставить шаблон здесь. Вы можете проверить только условия, когда выражения истинны/ложны. –

+0

Внесение задания в круглые скобки должно исправить это. Я обновил свой первоначальный ответ, из которого код в вопросе: http://stackoverflow.com/a/41432647/320615. – Dogbert

ответ

1

Как @KeithA заявил в своем комментарии, вы не можете иметь значение в вашем cond блоке, так что причина вы получаете resource/0 неопределенного потому, что resource = ... не работает.

И поэтому, чтобы сделать код работу, которую вы можете сделать следующее:

def index(conn, %{"user_id" => user_id}) do 
    user = Repo.get(User, user_id) 
      |> Repo.preload(:projects) 
    resource = Guardian.Plug.current_resource(conn) 

    cond do 
     user.id == resource.id -> 
     conn 
     |> render("index.html", projects: user.projects, user: user) 
     :error -> 
     conn 
     |> put_flash(:info, "No access") 
     |> redirect(to: session_path(conn, :new)) 
    end 
    end