gpt4 book ai didi

ruby-on-rails - grouped_collection_select 与 I18n

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:18 25 4
gpt4 key购买 nike

我一直在尝试想出一种方法来在类中声明数组常量,然后将数组成员作为选择控件中的分组选项呈现。我使用数组常量的原因是因为我不希望数据库模型支持这些选项。

这可以在基本意义上很容易地使用 grouped_collection_select View 助手来完成。不那么简单的是使它可本地化,同时将原始数组条目保留在后台。换句话说,我想在任何语言环境中显示选项,但我希望表单提交原始数组值。

无论如何,我想出了一个解决方案,但它似乎过于复杂。我的问题是:有没有更好的方法?是否需要复杂的解决方案,还是我忽略了更简单的解决方案?

我将使用人为的示例来解释我的解决方案。让我们从我的模型类开始:

class CharacterDefinition < ActiveRecord::Base
HOBBITS = %w[bilbo frodo sam merry pippin]
DWARVES = %w[gimli gloin oin thorin]
@@TYPES = nil

def CharacterDefinition.TYPES
if @@TYPES.nil?
hobbits = TranslatableString.new('hobbits', 'character_definition')
dwarves = TranslatableString.new('dwarves', 'character_definition')
@@TYPES = [
{ hobbits => HOBBITS.map {|c| TranslatableString.new(c, 'character_definition')} },
{ dwarves => DWARVES.map {|c| TranslatableString.new(c, 'character_definition')} }
]
end
@@TYPES
end
end

TranslatableString 类进行翻译:

class TranslatableString
def initialize(string, scope = nil)
@string = string;
@scope = scope
end

def to_s
@string
end

def translate
I18n.t @string, :scope => @scope, :default => @string
end
end

查看 erb 语句如下所示:

<%= f.grouped_collection_select :character_type, CharacterDefinition.TYPES, 'values[0]', 'keys[0].translate', :to_s, :translate %>

使用以下 yml:

en:
character_definition:
hobbits: Hobbits of the Shire
bilbo: Bilbo Baggins
frodo: Frodo Baggins
sam: Samwise Gamgee
merry: Meriadoc Brandybuck
pippin: Peregrin Took
dwarves: Durin's Folk
gimli: Gimli, son of Glóin
gloin: Glóin, son of Gróin
oin: Óin, son of Gróin
thorin: Thorin Oakenshield, son of Thráin

结果是:

Grouped collection select control

那么,我想出一个合理的解决方案了吗?还是我偏离了 rails ?

谢谢!

最佳答案

从我的问题收到的响亮的沉默回应中,我猜没有更好的方法了。不管怎样,这种方法很有效,我会坚持下去,直到我发现更好的东西。

关于ruby-on-rails - grouped_collection_select 与 I18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com