replace variable with its value in a ruby string, string itself is stored in a variable?
I have a variable containing a string and in run time i was to replace some variables which are stored in that string.
for example..
my_string = "Congrats you have joined groupName."
groupName = "*Name of my group*"
puts my_string
Output:-
"Congrats you have joined *name of the group*"
issue is:
my_string = " Congrats you have joined #{groupName}" expects groupName already exists.. but in my case i have to define my_string before variable in it.
Solution 1:
One way can be.. string replacment like using gsub.. but thats not good one..
PS:
What I am trying to achieve. We have some set of 100 messages that we have to deliver. I want to define at one single place and just replace some variable when needed. Now i want to define all these variables(100 ones) in the application_controller, so that I can just concatenate each variable(one开发者_如何学运维 of 100) defined. And automatically variable(variable which is defined in the string stored in one of those 100 variables). This language is quite confusing.. Check the example i explained above..
Or you can do this:
2.0.0-p247 :034 > a = "I love my live, says %{who}"
=> "I love my live, says %{who}"
2.0.0-p247 :035 > a % { :who => "me" }
=> "I love my live, says me"
You could store a format string:
my_string = "Congrats you have joined %s"
group_name = "My Group"
puts my_string % group_name # prints: Congrats you have joined My Group
For multiple variables in the same string you can use
my_string = "Congrats you have joined %s %s"
group_name = ['group1', 'group2']
puts my_string % ['group1', 'group2']
will result:--
"Congrats you have joined group1 group2"
You can use the I18n functionality to replace variables:
I18n.backend.store_translations :en,
:congrats => 'Congrats you have joined %{group_name}!'
I18n.translate :congrats, :group_name => 'My Group'
# => 'Congrats you have joined My Group!'
This way you only have a single point to maintain your texts. Your application_controller
is not the best place for static texts.
my_string = "Congrats you have joined groupName."
groupName = "*Name of my group*"
puts my_string.gsub('groupName',groupName)
Output :
"Congrats you have joined *name of the group*"
What it does is search for the 'groupName' string and replace it with the content of the groupName variable
You can use eval to replace variables in runtime :
my_string = 'Congrats you have joined #{groupName}.'
groupName = "*Name of my group*"
puts eval('"'+ my_string +'"')
精彩评论