gpt4 book ai didi

ruby-on-rails - 在性别选择中使用 Rails 的 Tinyint 和 select 标签

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:17 24 4
gpt4 key购买 nike

在数据库中,如果性别是女性,我存储 0,如果性别是男性,我存储 1。

我有一个这样的表单域:

<%= myobject.select(:gender, options_for_select([['Male', 1], ['Female', 0]]), {:prompt => 'Select Gender'})%>

在以下情况下效果很好:

  1. 该字段在选择了“选择性别”(无值)选项的对象中不存在。
  2. 该字段在数据库中为男性,它选择了男性选项

但是,如果字段是 Female,它会显示 Select Gender 选项。我相信是因为数据库中的 0 在检索时被认为是假的(因为 Rails 假定 Mysql 中的 0 是假的)因此在选择中它认为它必须提示非值文本。

假设我无法触及数据库结构,我应该如何处理这种情况。

最佳答案

将此移至答案而不是评论,因为如果您无法更改架构,这实际上是一种可选的方式。

如果你可以改变它: 字符串, :length => 1 # (M/F)

否则你可以使用这样的转换器:

我的对象.rb

def m_f
myobject.gender ? 'M' : 'F'
end

attr_accessor :gender_string


before_save :convert_gender
def convert_gender
self.gender = myobject.gender_string == 'M' ? 1 : 0
end

_form.html.erb

<%= myobject.select(:gender_string, options_for_select([['Male', 'M'], ['Female', 'F']]), {:prompt => 'Select Gender', :selected => myobject.m_f})%>

提交表单后,您需要再次将数据转换回来。

关于ruby-on-rails - 在性别选择中使用 Rails 的 Tinyint 和 select 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284141/

24 4 0