2016-03-06 4 views
0

У меня есть способ установить языковой стандарт на валюту.Ruby - метод вызова из символа

def local_number_to_currency(u) 
     number_to_currency u, 
     separator: ".", 
     delimiter: ",", 
     precision: 0, 
     locale: :fr, 
     raise: true 
    end 

Я хотел бы сделать :fr переменные для того, чтобы установить его в соответствии с переменным на основе атрибута называется сделка есть модальный атрибут «Страна»

def extract_locale_from_country(country)  
    COUNTRY_TO_YML_LOCALE_CODE[country] || DefaultLocale 
    end 

def local_number_to_currency(u) 
     number_to_currency u, 
     separator: ".", 
     delimiter: ",", 
     precision: 0, 
     locale: :#{extract_locale_from_country(deal.country)}, 
     raise: true 
    end 

Конечно линия locale: :#{extract_locale_from_country(deal.country)} не работает , Я не знаю, как заменить :fr на :{call amethod here} in ruby ​​

Как достичь этого?

+0

'# {...}' работает только в строковых литералов, используйте 'локали: extract_locale_from_country (...)' вместо этого. – Stefan

+0

_Sidenote_: https://github.com/RubyMoney/money – mudasobwa

ответ

3

вы должны явно преобразовать строку в символ

extract_locale_from_country(deal.country).to_sym 
+0

@Mathieu в этом случае вы также можете просто обернуть свой '# {}' в кавычки, например ': '# {extract_locale_from_country (deal.country)}", который выполняет то же самое, но использует тот факт, что ': foo ==:" foo "' –

+0

@maxpleaner Тот факт, что ': foo ==:" foo "' позволяет _skip с использованием экстраполяции строк для этих двух частных случаев. То, что вы имели в виду, вероятно, «использует тот факт, что': foo! = "Foo" ', но' '# {: foo}" == "# {'foo'}" '. – mudasobwa

+0

@mudasobwa Я говорил, что исходный код будет работать, если бы были добавлены цитаты. –

0

Вы можете преобразовывать строки в символы непосредственно с to_sym -methode.

... 
locale: :extract_locale_from_country(deal.country).to_sym, 
... 

Но вы должны быть осторожны, чтобы преобразовать ввод данных пользователя в символы, потому что «старая» версия Ruby (< 2.2) не Gc символов.

Symbol GC in Ruby 2.2

Смежные вопросы