2011-09-07 30 views
0

我有简单的选择列表,以纪念建筑是用于出售或不:导轨 - 如何显示一个替代值来存储值

<%= select(:building, :for_sale, options_for_select([['Unknown', 'u'], ['Yes', 'y'], ['No', 'n']])) %>

这是一个新的视角。当用户选择“未知”时,它将存储例如'你'。

但是,创建记录时,我将指向显示视图,其中显示'u'而不是“未知”,这是我希望看到的(尽管我想存储'u')。

什么是显示用户(或人类)文本的有效方式?也许这只是一个辅助方法,但我所提出的任何东西似乎都是如此简单的很多代码。任何“Rails方式”都可以解决这个问题?

更新:我目前在做这在我的观点:

<% case @building.for_sale when 'u' %> 
    Unknown 
    <% when 'y'%> 
    Yes 
    <% when 'n'%> 
    No 
<% end %> 

但这似乎......嗯,哑。

所以,问题仍然存在。有没有处理这种情况的最佳方法?

回答

3

我通常使用I18n API来做到这一点。

我一键下,每隔一定存储在config/locales/LOCALE.yml

en: 
    constants: 
    u: "Unknown" 
    y: "Yes" 
    n: "No" 

使用辅助检索常量翻译:

def translate_constant(constant) 
    t("constants.#{constant}") 
end 

# Usage 
translate_constant(@building.for_sale) 

你也可以创建一个帮助创造了选择的选项:

def constant_options_for_select(options) 
    options_for_select(options.map {|option| [translate_constant(option), option] }) 
end 

# Usage 
constant_options_for_select(['u', 'y', 'n']) 
+0

什么是优秀的方法!它完美的作品。我有一个问题。我无法理解“t(”常量。#{常量}“)”中的“t”。你能澄清一下吗? – Oscar

+0

这是'I18n.translate'的别名,以及其他细节,请参阅以下源代码和文档:https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/translation_helper.rb #L17 –