0

我得到了一个包含许多字段的大表格。有多个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_tagoptions_from_collection_for_select方法中添加默认选择。如何获得该category_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声明:

-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 回答