3

我在凤凰城的 Ecto 模型中建立了一个协会。一个组织有许多组织成员。在 OrganizationMember 控制器的 Edit 方法中,我试图创建一个 SELECT 元素,该元素将包含所有可供选择的组织。在编辑定义中,我有以下两行:

# organizations = Enum.to_list(from(o in Organization, order_by: o.name, select: [o.name, o.id]))
organizations = from(o in Organization, order_by: o.name, select: {o.name, o.id})

这是我在模板中显示选择的行:

<%= select f, :organization_id, @organizations, prompt: "Choose your organization" %>

如果我保留第一行的注释,我会在模板选择中收到此错误:

#Ecto.Query 未实现协议可枚举

如果我使用第一行并注释第二行,我会在控制器中收到此错误:

#Ecto.Query 未实现协议可枚举

如何让选择正确显示选择下拉列表和值?顺便说一句,organization_id 来自这个:

organization_member = Repo.get!(OrganizationMember, id) |> Repo.preload(:organization)    
organization_id = organization_member.organization.id
4

1 回答 1

6

正如错误消息所说,an%Ecto.Query{}不是 Enumerable。如果要带来查询结果,则必须调用存储库并为其提供查询:

Repo.all from(o in Organization, order_by: o.name, select: {o.name, o.id})

PS:请注意,我将 select 返回的值更改为元组,因为这是表单select需要的。

于 2015-09-15T07:11:58.787 回答