0

多くのフィールドを持つ 1 つの大きなフォームを取得しました。複数のselect_tagフィールドがあります。

  -(0..2).to_a.each do |id|
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name), :prompt=> '-- Select a Category --')

問題:送信時にフォームが拒否された場合、:new アクションは、以前に選択された select_tags の値を記憶していません。

他のすべてのフィールドは送信後に再表示されますが ( :title、 など:description)、categories_id失われます。

考えられる解決策:select_tagメソッドのにデフォルトの選択を追加する必要がありますoptions_from_collection_for_selectcategory_idその値を取得する方法は?前のフォームのフィールドにアクセスするにはどうすればよいでしょうか?

options_from_collection_for_select(Category.ordered, :id, :name, category_id)
4

2 に答える 2

0

このデータをセッションに保存し、存在する場合は新しいアクションにロードして、セッションからクリアすることができます。

そうすれば、フィールドが記憶されていないフィールドを拒否するたびに、セッションにロードされ、新しいアクションの選択にロードされます。それ以外の場合、このセッション変数が空白の場合、何もロードされません。

お役に立てれば。

于 2013-10-29T17:05:53.983 に答える
0

私の形で

@product.categories = []

しかし

@product.category_ids = [1,42,57]

そこで、厄介なifステートメントを 1 つ追加しました。

-if @product.category_ids.count == 0  #create new product
  -(0..2).to_a.each do |id|
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name), :prompt=> '-- Select a Category --')
-else  #edit old product, or fixing errors to previous submit
  -@product.category_ids.each do |category_id|
    = select_tag('product[category_ids][]', options_from_collection_for_select(Category.all, :id, :name, category_id), :prompt=> '-- Select a Category --')
于 2013-10-29T17:36:57.533 に答える