2016-04-18 5 views
3

私は選択タグ(フォームフィールドをドロップダウン)で比較的シンプルなフォームを持っています。フェニックスフレームワークで別々のモデルからオプションと値を含む選択タグを作成する方法

selectタグのオプション/値は動的で、カテゴリモデルが更新されると更新される必要があります。

フォームは、このようなweb/templates/posts/new.html.eexテンプレートによってレンダリングされています:

<%= render "form.html", changeset: @changeset, 
         action: project_path(@conn, :create) %> 

ここで私は、関連するフォームフィールドはweb/templates/posts/form.html.eex

<div class="form-group"> 
    <%= select f, :category, MyApp.Category, class: "form-control" %> 
    <%= error_tag f, :category %> 
    </div> 

にありますが、ここ

は、私が今持っているものです次のエラーが発生しました:

protocol Enumerable not implemented for MyApp.Category 

フォームの選択タグオプションとしてカテゴリリポジトリを使用するにはどうすればよいですか?

EDIT:PostControllerの新しいアクションで、Gazler(Gazに感謝)の提案に従ってカテゴリを取得しました。

def new 
    categories = Repo.all(MyApp.Category) 
    changeset = 
    user 
    |> build_assoc(:projects) 
    |> Project.changeset() 
    render(conn, "new.html", changeset: changeset) 
end 

と更新私のテンプレート:

<div class="form-group"> 
    <%= select f, :category, @categories, class: "form-control" %> 
    <%= error_tag f, :category %> 
    </div> 

、今、私は次のエラーを取得しています:

assign @categories not available in eex template. 

EDIT:それは多分私はAaron did hereとしてmultiple_select/4を使用する必要があるように見えるので、カテゴリのタイトルと値をカテゴリIDとして表示するオプションが必要です。

ANSWER:

はGazlerが(私のpost_controllerの新しいアクションに)掲載することをリンクから、このラインを使用して終了:

categories = Repo.all(Qlc.Category) |> Enum.map(&{&1.title, &1.id}) 

答えて

5

あなたは(あなたのコントローラに)あなたのオプションを取得する必要があります。

def new(conn, params) do 
    query = from(c in Category, select: {c.id, c.name}) 
    categories = Repo.all(query) 
    changeset = 
    user 
    |> build_assoc(:projects) 
    |> Project.changeset() 
    render(conn, "new.html", changeset: changeset, categories: categories) 
end 

次に、選択に使用する必要があります。ない:category_id

<div class="form-group"> 
    <%= select f, :category_id, @categories, class: "form-control" %> 
    <%= error_tag f, :category_id %> 
</div> 

から:categoryからの変更は、あなたはおそらくオプションを変換する必要があります。これを行う方法はHow to show all records of a model in Phoenix select fieldを参照してください。

+0

これは私にこのエラーを与えます: 'assign @categories in eex template'を利用できません。 –

+0

@AndrewHendrieテンプレートを投稿してください。 – Gazler

+0

はテンプレートを含むように編集されています - 投稿したものと同じです。 post_controllerの新しいアクションについても編集を参照してください。 –

関連する問題