私は選択タグ(フォームフィールドをドロップダウン)で比較的シンプルなフォームを持っています。フェニックスフレームワークで別々のモデルからオプションと値を含む選択タグを作成する方法
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})
これは私にこのエラーを与えます: 'assign @categories in eex template'を利用できません。 –
@AndrewHendrieテンプレートを投稿してください。 – Gazler
はテンプレートを含むように編集されています - 投稿したものと同じです。 post_controllerの新しいアクションについても編集を参照してください。 –