2010-11-03 85 views
2

我有一个下拉列表与多个单选按钮值可供选择。如果不选择一个选项,该值将作为空值保存在数据库中。但是,如果您选择一个选项,则无法取消选中它。所以我需要在下拉列表中有一个“未声明”的选项,它会将值保存为数据库中的空值。下拉列表选项值为空

如何以最好的方式更改这些设置,以便我可以将值保存在数据库中。我需要改变的下方,“不选择”值显示,当“不选择”多了一种选择选择null值这个代码将被保存到数据库中

<%= account_pref.input "editorial_#{key}".to_sym, :as => :radio, :collection => options_for(Editorial, key.to_sym), :wrapper_html => { :class => "compact" }, :label => key.titleize %> 

回答

1

只是空字符串应该这样做,我认为。

:collection => [['<none>','']] + options_for(Editorial, key.to_sym) 

这对我来说有一个整数领域工作,对于字符串字段,因为选项的值只能是字符串,真正有没有空值的形式概念可能较难。也许这里有人知道一个聪明的伎俩,但你总是可以在控制器梳理出来:

def create 
    @account = Account.new(params[:account]) 
    @account.editorial = nil if @account.editorial.empty? 

    ... 
end 

或许覆盖二传手在你的模型做同样的事情。不过,任何一个选项都会让人感觉有些不爽。

+0

感谢您的回复Hambend。 我输入我的代码如下; 在我的下拉列表顶部给了我一个选项'Not Stated',并且当我选择了这个选项时,我选择了'Not Stated'选项它并保存,一个空字符串被保存在数据库中。 这是我想要一个“空”值被保存的地方,但问题是如何? 我尝试将第二个参数设置为nil(如[[''',nil]]),并且由于某种原因,使用该设置,数据库将下拉列表的值保存为'on'。奇怪。 – 2010-11-03 12:00:34

+0

啊,没有意识到我们正在这里谈论一个字符串字段。我只使用了我为id字段发布的解决方案。用更多的建议更新了我的答案。 – dslh 2010-11-03 20:54:15