2016-04-18 16 views
3

我有一個帶有選擇標籤(下拉表單域)的相對簡單的表單。如何使用Phoenix Framework中的獨立模型創建帶選項和值的選擇標籤

選擇標記的選項/值是動態的,應在更新我的類別模型時更新。

這就是我現在得到:

的形式通過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 

如何將我的分類存儲庫用作表單中的選擇標籤選項?

編輯:我已經提取了我的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. 

編輯:看起來也許我應該使用multiple_select/4Aaron did here,因爲我希望選項顯示類別標題和值作爲類別ID。

答:

結束了使用從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 

然後你應該在select中使用它。不從:category:category_id

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

的變化,您可能需要改變的選項。請參閱How to show all records of a model in Phoenix select field瞭解如何操作。

+0

這給了我這個錯誤:'assign @categories not available in eex template'。 –

+0

@AndrewHendrie您能否發佈您的模板?編輯爲 – Gazler

+0

以包含模板 - 與您發佈的相同。請參閱有關post_controller的新操作的編輯。 –

相關問題