3

フェニックスの Ecto モデルに関連付けを設定しています。組織には多くの OrganizationMembers があります。OrganizationMember コントローラーの Edit メソッドで、選択するすべての組織を保持する SELECT 要素を作成しようとしています。編集定義には、次の 2 行があります。

# 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" %>

最初の行をコメントのままにしておくと、テンプレートの選択時に次のエラーが発生します。

protocol Enumerable が #Ecto.Query に実装されていません

最初の行を使用して 2 番目の行にコメントを付けると、コントローラーで次のエラーが発生します。

protocol Enumerable が #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 に答える