The @
denotes an instance variable, set in your controller for an instance of your model. Some views will call a partial for instance:
= render @courses
Will call a partial called _course.html.haml (or erb or slim) and automatically pass it a local variable for each render.
Inside that partial, you use are using a local variable course
, e.g.
= course.subject.title
= course.title
So in a standard view rendered by your controller you'll typically use instance variables so they are available across the controller action, meaning it can be used in partials called by your view whereas local variables cannot.