# Simple refactor?

**URL:** <https://discuss.rubyonrails.org/t/simple-refactor/66373>\
**Category:** rubyonrails-talk\
**Created:** [February 17, 2013, 11:43pm UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373 "2013-02-17T23:43:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![11155](https://avatars.discourse-cdn.com/v4/letter/1/d26b3c/32.png) [@11155](https://discuss.rubyonrails.org/u/11155)\
**Post date:** [February 17, 2013, 11:43pm UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/1 "2013-02-17T23:43:42Z")

</div>

Hi,

As I continue learning to program, I am finding things I think can probably be done in a better way. The following code seems like something programmers must run into all the time and I am wondering if there is a better way to write the code in this situation (it seems very repetitive to me). I'm having fun and trying to get better at this....

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:subject\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@subject\_id = session[:subject\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:book\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@book\_id = session[:book\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:chapter\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@chapter\_id = session[:chapter\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:section\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@section\_id = session[:section\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:subsection\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@subsection\_id = session[:subsection\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if !session[:minisection\_id].blank? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@minisection\_id = session[:minisection\_id] &nbsp;&nbsp;&nbsp;&nbsp;end

Is there a better way??

Thanks...

Dave

---

<div class="post-metadata">

**Author:** ![Rogerio\_Medeiros](https://avatars.discourse-cdn.com/v4/letter/r/7ab992/32.png) [@Rogerio\_Medeiros](https://discuss.rubyonrails.org/u/Rogerio_Medeiros)\
**Post date:** [February 18, 2013, 1:16am UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/2 "2013-02-18T01:16:50Z")

</div>

try

[:subject\_id, :book\_id, :chapter\_id, :section\_id, :subsection\_id, :minisection\_id].each do |k| “@#{k.to\_s}” = session[k] if session[k].present? end

---

<div class="post-metadata">

**Author:** ![Rogerio\_Medeiros](https://avatars.discourse-cdn.com/v4/letter/r/7ab992/32.png) [@Rogerio\_Medeiros](https://discuss.rubyonrails.org/u/Rogerio_Medeiros)\
**Post date:** [February 18, 2013, 1:20am UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/3 "2013-02-18T01:20:20Z")

</div>

or @subject\_id = session[:subject\_id] if session[:subject\_id].present?  
@book\_id = session[:book\_id] if session[:book\_id].present?  
@chapter\_id = session[:chapter\_id] if session[:chapter\_id].present?  
@section\_id = session[:section\_id] if session[:section\_id].present?  
@subsection\_id = session[:subsection\_id] if session[:subsection\_id].present?  
@minisection\_id = session[:minisection\_id] if session[:minisection\_id].present?

---

<div class="post-metadata">

**Author:** ![Tamara\_Temple](https://avatars.discourse-cdn.com/v4/letter/t/c37758/32.png) [@Tamara\_Temple](https://discuss.rubyonrails.org/u/Tamara_Temple)\
**Post date:** [February 18, 2013, 4:02am UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/4 "2013-02-18T04:02:11Z")

</div>

Sorry -- really not sure what's supposed to be happening here -- you're assigning to a string literal?

---

<div class="post-metadata">

**Author:** ![botp](https://avatars.discourse-cdn.com/v4/letter/b/258eb7/32.png) [@botp](https://discuss.rubyonrails.org/u/botp)\
**Post date:** [February 18, 2013, 5:34am UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/5 "2013-02-18T05:34:56Z")

</div>

apparently, he meant…

instance\_variable\_set(“@#{k.to\_s}”, session[k]) if session[k].present?

kind regards -botp

---

<div class="post-metadata">

**Author:** ![11155](https://avatars.discourse-cdn.com/v4/letter/1/d26b3c/32.png) [@11155](https://discuss.rubyonrails.org/u/11155)\
**Post date:** [February 18, 2013, 5:34pm UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/6 "2013-02-18T17:34:02Z")

</div>

botp wrote in post #1097518:

---

<div class="post-metadata">

**Author:** ![Andre\_Orvalho1](https://avatars.discourse-cdn.com/v4/letter/a/b4bc9f/32.png) [@Andre\_Orvalho1](https://discuss.rubyonrails.org/u/Andre_Orvalho1)\
**Post date:** [February 20, 2013, 1:56pm UTC](https://discuss.rubyonrails.org/t/simple-refactor/66373/7 "2013-02-20T13:56:18Z")

</div>

def set\_instance\_var\_with\_session\_value variable

instance\_variable\_set(“@#{variable.to\_s}”, session[variable]) if session[variable].present?

end

and you will have a general method for this, for any symbol.

for example call set\_instance\_var\_with\_session\_value(:subject\_id)

it should work!
