ライド・オン・Rails:誤植?:p69, リスト20

本の記載は

def remove_from_cart
  @cart = session[:cart]
  assoc = @cart.assoc(params[:id])
  @cart.delete(assoc)
  redirect_to :action => 'cart'
end

だけれども動かず。assocにnilが返る。「配列の配列」探索にassocを使っているが@cartの中にある配列は[Item,数量]。この構造、id値で引っ掛けられるんだろうか。なんとなく普通にループ組まないと動かない気がするので以下のように修正。

  def remove_from_cart
    @cart = session[:cart]
    @cart.each do |assoc|
      item, count = assoc
      if item.id == params[:id].to_i
        @cart.delete(assoc)
        break
      end
    end
    redirect_to :action => 'cart'
  end

動作確認・・・動きました。ちょっと泥臭いな。うまい方法があるんだろうか。Ruby知らないからわからないのねん。