Refactor question

Hi,
The code below works perfectly but is so repetitive I feel there must be
a standard way to refactor it in this situation. I am learning on my
own so am wondering how more experienced programmers would do this. Any
examples would be appreciated.

def reset_to_previous
contents_history = Profile.find(:first, conditions: [ “user_id =
?”, current_user.id])

  if contents_history[:last_minisection_id].present?
    session[:minisection_id]

=contents_history[:last_minisection_id]
session[:subsection_id]
=contents_history[:last_subsection_id]
session[:section_id] = contents_history[:last_section_id]
session[:chapter_id] = contents_history[:last_chapter_id]
session[:book_id] = contents_history[:last_book_id]
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title]
=Subject.find(session[:subject_id]).title
session[:book_title] = Book.find(session[:book_id]).title
session[:chapter_title]
=Chapter.find(session[:chapter_id]).title
session[:section_title] =
Section.find(session[:section_id]).title
session[:subsection_title] =
Subsection.find(session[:subsection_id]).title
session[:minisection_title]
=Minisection.find(session[:minisection_id]).title
redirect_to(:controller => “contents”, :action =>
“index_minisections”, :subsection_id => session[:subsection_id])
elsif contents_history[:last_subsection_id].present?
session[:subsection_id]
=contents_history[:last_subsection_id]
session[:section_id] = contents_history[:last_section_id]
session[:chapter_id] = contents_history[:last_chapter_id]
session[:book_id] = contents_history[:last_book_id]
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title]
=Subject.find(session[:subject_id]).title
session[:book_title] = Book.find(session[:book_id]).title
session[:chapter_title]
=Chapter.find(session[:chapter_id]).title
session[:section_title]
=Section.find(session[:section_id]).title
session[:subsection_title]
=Subsection.find(session[:subsection_id]).title
redirect_to(:controller => “contents”, :action =>
“index_subsections”, :section_id => session[:section_id])
elsif contents_history[:last_section_id].present?
session[:section_id] = contents_history[:last_section_id]
session[:chapter_id] = contents_history[:last_chapter_id]
session[:book_id] = contents_history[:last_book_id]
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title] =
Subject.find(session[:subject_id]).title
session[:book_title] = Book.find(session[:book_id]).title
session[:chapter_title] =
Chapter.find(session[:chapter_id]).title
session[:section_title] =
Section.find(session[:section_id]).title
redirect_to(:controller => “contents”, :action
=>“index_sections”, :chapter_id => session[:chapter_id])
elsif contents_history[:last_chapter_id].present?
session[:chapter_id] = contents_history[:last_chapter_id]
session[:book_id] = contents_history[:last_book_id]
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title]
=Subject.find(session[:subject_id]).title
session[:book_title] = Book.find(session[:book_id]).title
session[:chapter_title]
=Chapter.find(session[:chapter_id]).title
redirect_to(:controller => “contents”, :action
=>“index_chapters”, :book_id => session[:book_id])
elsif contents_history[:last_book_id].present?
session[:book_id] = contents_history[:last_book_id]
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title]
=Subject.find(session[:subject_id]).title
session[:book_title] = Book.find(session[:book_id]).title
redirect_to(:controller => “contents”, :action => “index_books”,
:subject_id => session[:subject_id])
elsif contents_history[:last_subject_id].present?
session[:subject_id] = contents_history[:last_subject_id]
session[:subject_title]
=Subject.find(session[:subject_id]).title
redirect_to(:controller => “subjects”, :action => “index”)
end
end

Thanks,

Dave

On Fri, Jan 10, 2014 at 9:55 AM, Dave C. [email protected]
wrote:

The code below works perfectly but is so repetitive I feel there must be
a standard way to refactor it in this situation.

It looks like the general pattern is to check if a given thing is
present, and if so, do a bunch of things, all of which are included in
the previous bunch (except of course for the first). So, maybe
instead of an else-chain, just make them all independent ifs, and have
them do ONLY what is not included in the next one.

-Dave


Dave A., the T. Rex of Codosaurus LLC (codosaur.us),
freelance software developer, and creator of these sites:
PullRequestRoulette.com, blog.codosaur.us, & Dare2XL.com.

On Fri, Jan 10, 2014 at 8:55 AM, Dave C.
[email protected]wrote:

What version of Rails is this? Rails 2? Did Rails 3 use conditions? (It
has
been sooo lonnnggg)

tamouse m. wrote in post #1132818:

On Fri, Jan 10, 2014 at 8:55 AM, Dave C.
[email protected]wrote:

What version of Rails is this? Rails 2? Did Rails 3 use conditions? (It
has
been sooo lonnnggg)

Rails 3.2.11

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs