Elixir 连接和预加载在Phoenix Exto上有什么区别
我不知道如何在凤凰城使用外星 我的模式是:Elixir 连接和预加载在Phoenix Exto上有什么区别,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我不知道如何在凤凰城使用外星 我的模式是: schema "members" do field :first_name, :string field :last_name, :string belongs_to :prefecture, Prefecture timestamps() end schema "prefectures" do field :prefecture_name, :string has_many :members
schema "members" do
field :first_name, :string
field :last_name, :string
belongs_to :prefecture, Prefecture
timestamps()
end
schema "prefectures" do
field :prefecture_name, :string
has_many :members, Member
timestamps()
end
工作的预加载:
def list_members do
Repo.all(Member)
|> Repo.preload(:prefecture)
end
并且在模板中可以用作:
<%= for member <- @members do %>
<tr>
<td><%= member.last_name %></td>
<td><%= member.first_name %></td>
<td><%= member.perfecture.prefecture_name %></td>
</tr>
<% end %>
在模板中,按以下方式使用:
<%= for member <- @members do %>
<tr>
<td><%= member.last_name %></td>
<td><%= member.first_name %></td>
<td><%= member.prefecture_name %></td>
</tr>
<% end %>
区别是什么?我应该怎么做才能让它工作?
我想用连接方式。(2) 这并不是说它不起作用。如错误所示,问题在于结果的格式 此代码的结果是:
Repo.all(Member)|>Repo.preload(:地区)
是%成员{}
结构的列表。而另一个查询的结果是一个仅包含所选内容的地图列表
因此,出现了错误。它来自您正在使用的:
这些URL帮助程序可以根据应该使用的内容(id、slug等)从结构构建URL。但关键是,他们期望一个结构。如果要使用第二次查询结果的帮助程序,则必须将id直接传递给URL帮助程序Routes.member\u path
,而不是整个成员
结构。比如:
为此,您需要将成员的id添加到查询中的结果映射中:
def list_成员做什么
查询=来自成员中的m,
join:p在地区,on:p.id==m.epistration\u id,
选择:%{id:m.id,姓氏:m.last\u name,姓氏:m.first\u name,郡县名称:p.郡县名称}
全部回购(查询)
终止
这是指如果您正在使用URL的id(例如,
/members/:id
),如果您正在使用其他内容,则必须使用该id。首先请澄清您的问题,显示perfecture模式是什么,并删除模板示例,因为它们不相关。能否显示调用列表成员的代码?我想它在呈现模板或类似于def index(conn,_params)do members=Scoresheets.list_members()呈现(conn,“index.html”,members:members)endI之前就在控制器中。我不认为错误来自您共享的内容。您正在使用URL帮助器吗?比如member\u路径(conn,:show,member)
或者类似的东西?如果是的话,请在你的问题中包括它。我的意思是在你的模板中。是否有从成员索引模板到成员的:show
页面的链接?%{id:m.id
不适用于
。有什么问题吗?您是否按照回答中的建议将id
添加到查询中?(它被添加为地图的第一项)此外,您的路线是否使用了成员的id?我的意思是:select:%{id:m.id,last\u name:m.last\u name,first\u name:m.first\u name,郡县名称:p.authority\u name}
你更新了它以包含id吗?是的。我想如果我把%{id:m.id,
,那么
起作用。我可能会误解。不,不。看看更新的部分:路由。成员路径(@conn,:show,member.id)
用member.id
替换member
是其中最重要的事情,因为如果您传递的不是结构,帮助程序将不知道使用什么。如果您使用member.id
,它应该可以工作
<%= for member <- @members do %>
<tr>
<td><%= member.last_name %></td>
<td><%= member.first_name %></td>
<td><%= member.prefecture_name %></td>
</tr>
<% end %>
maps cannot be converted to_param. A struct was expected, got: %{first_name: "Boo", last_name: "Muu", prefecture_name: "Japan"}