是否有类似'with_indifferent_access'的数组可用于包含?

时间:2014-02-16 20:29:47

标签: ruby-on-rails ruby

我尝试仅在我的应用中使用:符号作为关键词。我尝试严格决定:symbol => logic或string => UI /语言特定

但我得到一些"价值观" (也就是选项等等)每个JSON也是如此,因为在JSON中没有:符号,所有我调用的哈希都有" with_indifferent_access"属性。

但是:数组有相同之处吗?像那样

a=['std','elliptic', :cubic].with_indifferent_access

a.include? :std => true

编辑:为标签添加了导轨

2 个答案:

答案 0 :(得分:2)

a = ['std','elliptic', :cubic].map(&:to_sym)
a.include? :std
#=> true

编辑 - 关于maxigs的评论可能更好地转换为字符串:

a = ['std', 'elliptic', :cubic].map(&:to_s)
a.include? "std"
#=> true

答案 1 :(得分:0)

TL;博士

['std','elliptic', :cubic].flat_map { |s| [s.to_sym, s.to_s] }

很多次使用Rails,我将对数组中的包含进行验证。我也喜欢使用符号。它可能看起来像这样:

validates :source, inclusion: { in: [:source1, :source2] }

当我第一次使用符号创建对象时,这可能是有效的,但是当它从db读取source并返回一个字符串时变为无效。我可以通过猴子修补吸气剂总是返回符号,但我宁愿不回答。相反,我做:

validates :source, inclusion: { in: [:source1, :source2].flat_map { |s| [s, s.to_s] } }