13

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..

2
  • 2
    Duplicate of stackoverflow.com/questions/554666/… Commented Jul 21, 2011 at 12:44
  • 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. isn't valid Ruby code. It also isn't valid English. Commented Sep 15, 2011 at 0:04

5 Answers 5

31

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" 
Sign up to request clarification or add additional context in comments.

1 Comment

This is why Ruby is so cool. If anyone is curious, this is documented in the Kernel#sprintf documentation (last example).
16

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" 

1 Comment

my_string % ['group1', 'group2']
3

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.

Comments

-1
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

1 Comment

It's only a gsub not a gsub! it doesn't modify the object but create a new string
-1

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 +'"')

2 Comments

check my question. I specified whats the issue with this format.
Mohit, pay attention to single quotes in my_string "'", this expression won't be evaluated until you use eval, so you can define string before defining variable..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.