Phoenix和Ecto以及SELECT

Rob*_*Rob 3 elixir ecto phoenix-framework

我在凤凰城的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})
Run Code Online (Sandbox Code Playgroud)

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

<%= select f, :organization_id, @organizations, prompt: "Choose your organization" %>
Run Code Online (Sandbox Code Playgroud)

如果我保留第一行注释,我会在模板上选择以下错误:

protocol Enumerable未针对#Ecto.Query实现

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

protocol Enumerable未针对#Ecto.Query实现

如何让select正确显示选择下拉列表和值?BTW,organization_id来自于:

organization_member = Repo.get!(OrganizationMember, id) |> Repo.preload(:organization)    
organization_id = organization_member.organization.id
Run Code Online (Sandbox Code Playgroud)

Jos*_*lim 6

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

Repo.all from(o in Organization, order_by: o.name, select: {o.name, o.id})
Run Code Online (Sandbox Code Playgroud)

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