Bit*_*ise 1 elixir phoenix-framework
当我尝试与数据库中的用户创建会话时,我遇到了此错误.我的用户架构has_many项目因此,当我尝试创建会话时,我收到此错误
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>}
Run Code Online (Sandbox Code Playgroud)
我是elixir和凤凰的新手,所以对此错误的任何帮助都将不胜感激!
在你提取的地方user,你需要明确地 preload联系:projects,所以在控制器中你可能有类似的东西:
user = Repo.get(User, user_id)
Run Code Online (Sandbox Code Playgroud)
这必须转向:
user =
User
|> Repo.get(user_id)
|> Repo.preload(:projects)
Run Code Online (Sandbox Code Playgroud)
请注意,代码已格式化,pipe operator为清楚起见,此处使用.相当于它将是这样的:
user = Repo.preload(Repo.get(User, user_id), :projects)
Run Code Online (Sandbox Code Playgroud)
我在这里补充说,因为你已经提到你是灵丹妙药的新手.
如果你想了解更多关于Ecto's的信息preload,请看一下:https://hexdocs.pm/ecto/Ecto.Repo.html#c:predeload/3
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
2147 次 |
| 最近记录: |