2016-12-23 4 views
0

Я сталкиваюсь с этой ошибкой, когда пытаюсь создать сеанс с пользователем из базы данных. Мои схемы пользователь has_many проекты Так что, когда я пытаюсь создать сеанс, я получаю эту ошибкуПредварительная загрузка с elixir и phoenix

projects: #Ecto.Association.NotLoaded<association :projects is not loaded>

Я думаю, я понимаю, что он говорит, но я не знаю, где предварительно загрузить данные так, что страница сделать здесь полную ошибку, которую я получаю.

defmodule PerriAir.Router do 
use PerriAir.Web, :router 
use Honeybadger.Plug 
use ExAdmin.Route  

pipeline :browser do 



protocol Enumerable not implemented for %PerriAir.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, id: 8, inserted_at: #Ecto.DateTime<2016-12-23 15:38:38>, password: nil, password_hash: "$2b$12$NxLaK3ZUVPLE23E1L.64GOjm7FtTLemXPUXsp6gSAP346is8e6d5e", projects: #Ecto.Association.NotLoaded<association :projects is not loaded>, updated_at: #Ecto.DateTime<2016-12-23 15:38:38>} 

Я новичок в эликсире и фениксе, поэтому любая помощь с этой ошибкой будет оценена!

ответ

5

Где вы выборки user, вам нужно явноpreload связанного :projects, поэтому контроллер у вас есть предположительно что-то вроде:

user = Repo.get(User, user_id) 

Это должно быть повернут к чему-то вроде:

user = 
    User 
    |> Repo.get(user_id) 
    |> Repo.preload(:projects) 

Обратите внимание, что код отформатирован, и для ясности используется pipe operator. Эквивалент этого было бы что-то вроде:

user = Repo.preload(Repo.get(User, user_id), :projects) 

Я добавил, что здесь, потому что вы уже упоминали вы новичок эликсир.

Если вы хотите узнать больше о Ecto «s preload, посмотрите здесь: https://hexdocs.pm/ecto/Ecto.Repo.html#c:preload/3

Надежда, что помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^