2013-04-25 3 views
4

Я работаю над концепцией Локализация в Rails и должен получить некоторые значения локализации в HTML-страницах. Так я генерируюсь массив в контроллере, как показано ниже формата.,Как получить значения массива в Ruby On Rails

#array use to store all localization values 
@alertMessages = [] 

#array values... 
{:index=>"wakeUp", :value=>"Wake Up"} 
{:index=>"tokenExpired", :value=>"Token Expired"} 
{:index=>"timeZone", :value=>"Time Zone"} 
{:index=>"updating", :value=>"Updating"} 
{:index=>"loadMore", :value=>"Load More"} 
#....more 

В HTML страницы я хочу, чтобы получить значение локализации, как показано ниже, или какой-либо другой типа,

<%= @alertMessages['wakeUp'] %> 

так, он будет отображать значение 'Wake Up',

Но ее не работает .. Может ли один пожалуйста ...

ответ

4

Проще использовать хэш для этого (http://api.rubyonrails.org/classes/Hash.html), который похож на массив с именованными индексами (или клавишами).

Так что это:

@alertMessages = { 
    :wakeUp => "Wake Up", 
    :tokenExpired => "Token Expired", 
    . 
    . 
    . 
} 

вы также можете продлить ваш хэш следующим образом:

@alertMessages[:loadMore] = "Load More" 

доступ к нему с помощью:

@alertMessages[:loadMore] 

Кроме того, вы должны проверить i18n делать Интернационализация, которая является более надежной и гибкой: http://guides.rubyonrails.org/i18n.html

+0

Холодный ответ .... –

+0

Возможность получить доступ с помощью @alertMessages [ «loadMore»] ..., без указания кавычки не удалось открыть значение –

+0

ой спасибо за указание ошибки, я думаю, вы можете использовать «строки» или: символы. –

1

Массив не кажется, действительно здесь уместно, но если вы все еще хотите использовать его, выполните THS путь:

array.find{|el| el[:index] == "wakeUp"}[:value] 

Вы должны абстрактные это, хотя.

0

попробовать это:

<% 
    @alertMessages.each_with_index do |alertMessage, index| 
    alertMessage[:value] if index == "wakeUp" 
    end 
%> 

Спасибо.

+0

Зачем нам нужно запускать всю длину массива ...? –

+0

да, вы правы. то ответ @ apneadiving является лучшим: 'array.find {| el | el [: index] == "wakeUp"} [: value] ' – rony36

2
# Hash to store values 
@alertMessages = {} 

#hashvalues... 
alertMessages[:wakeUp] = "Wake Up" 
alertMessages[:tokenExpired] = "Token Expired" 
alertMessages[:timeZone] = "Time Zone" 
alertMessages[:updating] = "Updating" 
alertMessages[:loadMore] = "Load More" 

#....more 
In HTML pages i want to get localization values like below or some other type, 

<%= @alertMessages[:wakeUp] %> 
so, it will display value is 'Wake Up', 

И пытаются использовать всегда символы, потому что lookup will be fast

+0

и вы можете преобразовать из символа в строку с помощью to_s и наоборот с to_symbol. – Trompa

+0

при попытке вашего метода я получаю эту ошибку ** NoMethodError (неопределенный метод '<< 'для {}: Hash): ** –

+0

где? потому что это работает на моем компьютере ... Может быть, это в другой части вашего кода, который все еще использует alertMessages как массив? – Trompa