Phoenix and Ecto и SELECTs

У меня есть ассоциация, созданная в моделях Ecto в Фениксе. В организации много участников. В методе Edit контроллера OrganizationMember я пытаюсь создать элемент 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" %>

Если я оставлю комментарий к первой строке, я получу эту ошибку при выборе шаблона:

протокол Enumerable не реализован для # Ecto.Query

Если я использую первую строку и прокомментирую вторую, я получаю эту ошибку в контроллере:

протокол Enumerable не реализован для # Ecto.Query

Как сделать так, чтобы при выборе правильно отображалось раскрывающееся меню и значения? Кстати, organization_id происходит от этого:

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

person Rob    schedule 15.09.2015    source источник


Ответы (1)


Как говорится в сообщениях об ошибках, %Ecto.Query{} не является Enumerable. Если вы хотите вывести результаты запроса, вы должны вызвать репозиторий и передать ему запрос:

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

PS: Обратите внимание, что я изменил значение, возвращаемое select, на кортеж, потому что это то, что нужно форме select.

person José Valim    schedule 15.09.2015
comment
Я исхожу из опыта работы с C #, и я думаю, что меня сбивает с толку синтаксис, подобный LINQ. Я не понимал, что from просто возвращает запрос, а не фактический набор данных. - person Rob; 15.09.2015