如果marital_status中有值,则不应显示提示,但在我的情况下显示。我的代码如下所述。请帮忙。
= select_tag( 'request[marital_status]',
options_for_select(marital_status_options,
@employee.marital_status.try(:upcase)), prompt: "Select Marital Status", id: 'employee_marital_status', disabled: @request.submitted?)
在employee_helper.rb
中def marital_status_options
Employee::MaritalStatus::ALL.zip(Employee::MaritalStatus::ALL)
end
员工模式
module MaritalStatus
MARRIED = 'MARRIED'
SINGLE = 'SINGLE'
DIVORCED = 'DIVORCED'
ALL = [MARRIED, SINGLE, DIVORCED]
end
答案 0 :(得分:0)
格式和用法是正确的。请验证@employee.marital_status.try(:upcase)
是否与此处提供的marital_status_options
完全匹配。
这似乎是这种行为的可能情况。
此外,select_tag中预期的第一个参数需要采用适当的格式,在本例中为一个字符串数组。
因此,您的方法marital_status_options
应该返回一个用于下拉列表的选项数组。
def marital_status_options
['MARRIED', 'SINGLE', 'DIVORCED']
end
答案 1 :(得分:0)
你非常接近。这里的问题可能源于您的marital_status_options
方法:由于您的分配,它会在评估到最后一行时返回DIVORCED
。
因此,如果您的实例包含“DIVORCED”,您可能会发现该值已被选中,但不是其他任何值;您的实例的值需要匹配其中一个,以便选择它而不是提示。
您可能想要更改此内容:
def marital_status_options
MARRIED = 'MARRIED' # this will be evaluated first
SINGLE = 'SINGLE' # then this
DIVORCED = 'DIVORCED' # finally, this will be evaluated and returned as 'DIVORCED'
end
到一个数组:
def marital_status_options
['MARRIED', 'SINGLE', 'DIVORCED']
end
或者,将选项显示为小写但在db中保留大写值:
def marital_status_options
[['Married', 'MARRIED'], ['Single', 'SINGLE'], ['Divorced', 'DIVORCED']]
end
查看options_for_select
上的文档,您将看到可以设置的人员。
更进一步,您可能需要考虑切换到enums
- 这些非常便于管理这些选项,并自动生成Employee.married
,employee.divorced?
等方法,等等。
正如其他人提到的那样,最好将相关数据存储在相关模型中,尽管我认为这些应该存储为常量,因为它们不会改变。所以下列之一:
# employee.rb
MARITAL_STATUSES = ['MARRIED', 'SINGLE', 'DIVORCED'].freeze
# or
MARITAL_STATUSES = [['Married', 'MARRIED'], ['Single', 'SINGLE'], ['Divorced', 'DIVORCED']].freeze
= select_tag('request[marital_status]',
options_for_select(Employee::MARITAL_STATUSES,
@employee.marital_status.try(:upcase)),
prompt: "Select Marital Status",
id: 'employee_marital_status',
disabled: @request.submitted?)
希望有所帮助 - 如果您有任何疑问或需要其他任何内容,请与我联系。
答案 2 :(得分:-1)
= select_tag "request[marital_status]", options_for_select(Employee.marital_status_options,
@employee.marital_status.try(:upcase)), :include_blank => '--Select Marital Status--', id: id: 'employee_marital_status', disabled: @request.submitted?
在模型中定义marital_status_options(业务逻辑)是一种很好的做法: -
假设它是员工模型
def self.marital_status_options
[
["MARRIED","MARRIED"],
["SINGLE","SINGLE"],
["DIVORCED", "DIVORCED"]
]
end
没有选择默认的marital_status的原因是因为如果@employee.marital_status.try(:upcase)
与marital_status_options
中的任何一个都不匹配,它会显示您的prompt
选项,因此请仔细检查如果@employee.marital_status.try(:upcase)
与select tag的选项中的任何给定选项匹配,则