So that intense lab I was talking about yesterday… it took no time at all because of Rails. It was AWESOME. One of the things I learned today that is going to make life easier and ensure DRY.
# example_controller.rb # Insert at top of controller before_action :set_example, only: [:show, :edit, :update, :destroy] # Insert at end of controller private def set_example @example = Example.find(params[:id]) end
So up until now to access a DB object as an instance variable I’ve used the ID passed in from the URL or form and then done a lookup to set the instance variable. That means my code was exactly the same and in four different methods. I always thought this was clunky but didn’t look too hard into how to change it. Now I have a way. So
before_action is telling the controller before the action (method) happens to do this. However,
only: for these
[:show, :edit, :update, :destroy] actions. What do we need to do? That’s right, the
:set_example action which is then accessible to the listed actions. So the instance variable is available for each of those views. Check out Filter on Rails Guides.
I also learned the difference between
PUThas the ability to update the entire object.
PATCHupdates only the elements that were changed. Therefore this is the preferred method because of lower overhead.
I realize it has only been 4 days since I started Rails but I like taking a snapshot of where I am and where I want to be on Sunday nights. According to my dashboard, I’m 32% ( 37 / 113 ) done with Rails. I must’ve counted wrong or things have been added because I counted 104 total plus 3 projects. Either way, I think I’m well on my way to hitting the projects starting May 10th which would take a <5 lessons/day pace.
Okay, I have my Sinatra Project review at 7:15am so I’m off to bed.
Time spent today: 3:52
Time spent total: 213:43
Lessons completed today: 12
Lessons completed total: 443