【发布时间】:2013-10-29 16:56:37
【问题描述】:
我得到了一个包含许多字段的大表格。有多个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 会丢失。
可能的解决方案:我们必须在options_from_collection_for_select 方法中为select_tag 添加默认选择。如何获得category_id 值?我们如何访问之前表单的字段?
options_from_collection_for_select(Category.ordered, :id, :name, category_id)
【问题讨论】:
-
你试过你的“可能的解决方案”吗?它奏效了吗?如果是这样,这应该以问答形式发布。
-
这并不完全是一个解决方案,因为有一个未知变量 - 'category_id'。我的问题是:“我怎样才能得到那个未知变量?”。
-
我会使用 ajax 并使用 json 或
FormData提交表单。如果失败,请使用响应突出显示无效输入(您永远不会离开页面,因此保留用户输入)。如果成功,则在位置标头中返回一个 url,并使用pushState或window.location进行重定向。表单仍然应该为没有 js 的用户提交 - 他们只是在失败时不会看到他们的原始值。
标签: ruby-on-rails forms haml