2015-09-15 2 views
3

У меня есть ассоциация, созданная в моделях Ecto в Фениксе. У Организации есть много Членов Организации. В методе Edit контроллера OrganizationMember я пытаюсь создать элемент SELECT, который будет содержать все организации на выбор. В редактировать definitiion, у меня есть следующие две строки:Phoenix и Ecto и SELECTs

# 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 

ответ

6

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

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

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

+0

Я исхожу из фона C#, и я думаю, что я сработал синтаксисом LINQ. Я не понимал, что _from_ просто возвращает запрос, а не фактический набор данных. – Rob

Смежные вопросы