我有一个状态字段,将值存储为2个字符。例如,Alabama保存为AL,Alaska保存为AK,Arizona保存为AZ等。在show.html.erb中,如何显示状态的长名称,例如Alabama而不是仅显示AL?这是可能的还是我应该将长名称存储在数据库中,如阿拉巴马州,阿拉斯加州,亚利桑那州等?
答案 0 :(得分:5)
编写一个方法,输出状态的长名称并在show.html.erb
some_model.rb
:
SomeModel < ActiveRecord::Base
STATE_CODES = {
"AL": "Alabama", "AK": "Alaska",
# add remaining 50
}
def state_human_name
STATE_CODES[self.state]
end
show.html.erb
:
<%= record.state_human_name %>
编辑:在数据库中存储状态的全名无济于事 - 至少在某处你需要短格式,因此无论如何都需要在短格式和长格式之间添加映射。
答案 1 :(得分:1)
是否有理由使用2个字母代码(例如遗留数据库)?如果不是,我会坚持通常的ActiveRecord成语,并有一个单独的“状态”表由id链接。如果您需要2个字母的代码用于显示,打印地址标签或其他任何内容,则添加'state_code'属性到状态表但不要将其用作主键。
答案 2 :(得分:1)
我把它放在评论中,但我已经确定它有足够的不同以保证答案。
当您决定在哪里保留您的州地图时,请考虑您是否需要将货物运送到加拿大或更远的地方。如果是这样,那么设置状态表是值得的,该状态表链接到国家/地区表。
无论如何,如果您的数据很少发生变化,那么将它放在数据库中的问题就不那么容易了,因为代码更改的频率更高。更频繁的变化=更多机会搞砸了。另外,按照您的喜好排序也很简单。
class State < ActiveRecord::Base
def self.get_states
@@states || State.find(:all,
:include => :country,
:order => 'countries.name, long_name')
end
end
答案 3 :(得分:0)
Tilendor,我注意到如果我使用STATE_CODES.invert,下拉菜单选择会出现故障。例如,我的选项列表的前五行如下所示:
新罕布什尔州 俄亥俄州 科罗拉多州 明尼苏达 阿拉巴马 ...
在我的STATES_CODES哈希中,我在下面的顺序中列出了以下内容:
“AL”=&gt; “亚拉巴马”号, “AK”=&gt; “阿拉斯加州”, “AZ”=&gt; “亚利桑那”, “AR”=&gt; “阿肯色州” “CA”=&gt; “加利福尼亚”, ...
有没有办法让表格中列出的选项与STATES_CODES的顺序相同?也许按字母顺序排序?