【问题标题】:Phoenix and Ecto and SELECTsPhoenix 和 Ecto 以及 SELECT
【发布时间】:2015-12-11 04:03:13
【问题描述】:

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

# 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

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

    正如错误消息所说,%Ecto.Query{} 不是 Enumerable。如果你想带上查询结果,你必须调用存储库并给它查询:

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

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

    【讨论】:

    • 我来自 c# 背景,我想我被类似 LINQ 的语法绊倒了。我没有意识到 from 只是返回一个查询,而不是一个实际的数据集。
    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2016-12-17
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多