如何使用Ruby 2.5.3从数组中删除字符串?

use*_*081 1 ruby arrays ruby-on-rails

我在Ruby on Rails 5.2上开发.为了管理翻译,我希望允许用户选择与他当前语言不同的语言.应用程序的已配置语言列表是

 all_languages = I18n.config.available_locales
Run Code Online (Sandbox Code Playgroud)

all_languages是一个数组.puts all_languages收益:

en fr de it
Run Code Online (Sandbox Code Playgroud)

用户语言在users表中定义.方法返回当前用户的语言

user_language = current_user.language
Run Code Online (Sandbox Code Playgroud)

user_language是一个String.puts user_language收益:

en
Run Code Online (Sandbox Code Playgroud)

我尝试将delete(obj)方法应用于数组,但这不会改变数组:

all_languages.delete(user_language)
Run Code Online (Sandbox Code Playgroud)

我尝试只处理数组,但它不会改变语言数组:

remove_language = Array.new
remove_language << user_language
Run Code Online (Sandbox Code Playgroud)

puts remove_language 收益:

en
Run Code Online (Sandbox Code Playgroud)

puts all_languages - remove_language 收益:

en fr de it
Run Code Online (Sandbox Code Playgroud)

应删除en语言的地方.我不明白为什么它仍然在列表中!

Ser*_*sev 7

I18n.config.available_locales返回符号*.你current_user.language是一个字符串."en"与...完全不一样:en.那说,这应该工作:

all_languages = I18n.config.available_locales.dup # copy the array
all_languages.delete(:en)
# or, for your case
all_languages.delete(current_user.language.to_sym)


# non-mutating way
all_langs_without_en = I18n.config.available_locales.reject { |loc| loc == :en }
Run Code Online (Sandbox Code Playgroud)

*至少在rails 4.2中,我检查了这个.

  • @Jurgen:谢谢,但sawa在50分钟之前打电话给它,没有人听过:) (3认同)