Shopping cart in Rails for karaoke items
Generally looks great.

Since @cart is basically a list of Karaoke ids, you could update the list_items method to look like that:

def list_items
  @items = Karaoke.find(@cart)
end


Then the cart view can be transformed into:

&lt;h1&gt; Cart &lt;/h1&gt;
&lt;% @items.each do |item| %&gt;
  &lt;p&gt;
    &lt;%= item.name %&gt;
    &lt;%= link_to "Remove", remove_path(item) %&gt;
  &lt;/p&gt;
&lt;% end %&gt;


Using a Set instead of plain array enables us to remove the presence checking and make sure items are always unique in the cart:

class ApplicationController &lt; ActionController::Base
  ...

  def set_cart
    session[:cart] ||= []
    @cart = Set.new(session[:cart])
  end
end

class CartController &lt; ApplicationController
  def add_item
   @cart.add(karaoke_id) if Karaoke.exists?(karaoke_id)

   redirect_to cart_path
  end

  def remove_item
    @cart.delete(karaoke_id)

    redirect_to cart_path
  end

  def karaoke_id
    params[:id].to_i
  end
end


As a side note, I know it's kind of a personal preference, but consider using 2 spaces for indentation as per the style guide.