Adding items to cart first attemp fail

hi im workiing on ruby on rails im just wondering if my add_product is
wrong because when i add my product in to my cart at first attemp it
fail and give me a

nil cannot concien bigdecimal error

but clicking return from my browser and add item at the second attemp it
worked fine and but didnt count my first attemp of adding my product
this is my add_product method

my model/cart.rb :
has_many :line_items, :dependent => :destroy
def add_product(product_id)
current_item = line_items.where(:product_id => product_id).first
if current_item
current_item.quantity = current_item.quantity.to_i + 1
else
current_item = LineItem.new(:product_id=>product_id)
line_items << current_item
end
current_item
end

def total_price
Array.wrap(line_items).sum { |item| item.total_price }
end

my cart/show.html.rb:

Your Cart
<% for item in @cart.line_items %> <% end %>
<%= item.quantity %>× <%= item.product.title %> <%= number_to_currency(item.total_price) %>
Total <%= number_to_currency(@cart.total_price) %>
<%= button_to 'Empty cart', @cart, :method => :delete, :confirm => 'Are you sure?' %>

my model/line_item.rb
def total_price
if product.price
product.price = product.price * quantity
else
0.to_d
end
end

full trace:

app/models/line_item.rb:14:in *' app/models/line_item.rb:14:intotal_price’
app/views/carts/show.html.erb:7:in block in _app_views_carts_show_html_erb___389431939__618846538' activerecord (3.1.1) lib/active_record/associations/collection_proxy.rb:91:ineach’
activerecord (3.1.1)
lib/active_record/associations/collection_proxy.rb:91:in
method_missing' app/views/carts/show.html.erb:3:in_app_views_carts_show_html_erb___389431939__618846538’
actionpack (3.1.1) lib/action_view/template.rb:144:in block in render' activesupport (3.1.1) lib/active_support/notifications.rb:55:ininstrument’
actionpack (3.1.1) lib/action_view/template.rb:142:in render' actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:40:inblock (2 levels) in render_template’
actionpack (3.1.1) lib/action_view/renderer/abstract_renderer.rb:33:in
block in instrument' activesupport (3.1.1) lib/active_support/notifications.rb:53:inblock
in instrument’
activesupport (3.1.1)
lib/active_support/notifications/instrumenter.rb:21:in instrument' activesupport (3.1.1) lib/active_support/notifications.rb:53:ininstrument’
actionpack (3.1.1) lib/action_view/renderer/abstract_renderer.rb:33:in
instrument' actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:39:inblock in render_template’
actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:47:in
render_with_layout' actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:38:inrender_template’
actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:12:in
block in render' actionpack (3.1.1) lib/action_view/renderer/abstract_renderer.rb:22:inwrap_formats’
actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:9:in
render' actionpack (3.1.1) lib/action_view/renderer/renderer.rb:36:inrender_template’
actionpack (3.1.1) lib/action_view/renderer/renderer.rb:17:in render' actionpack (3.1.1) lib/abstract_controller/rendering.rb:120:in_render_template’
actionpack (3.1.1) lib/action_controller/metal/streaming.rb:250:in
_render_template' actionpack (3.1.1) lib/abstract_controller/rendering.rb:114:inrender_to_body’
actionpack (3.1.1) lib/action_controller/metal/renderers.rb:30:in
render_to_body' actionpack (3.1.1) lib/action_controller/metal/compatibility.rb:43:inrender_to_body’
actionpack (3.1.1) lib/abstract_controller/rendering.rb:99:in render' actionpack (3.1.1) lib/action_controller/metal/rendering.rb:16:inrender’
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:40:in
block (2 levels) in render' activesupport (3.1.1) lib/active_support/core_ext/benchmark.rb:5:inblock in ms’
/home/led/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in
realtime' activesupport (3.1.1) lib/active_support/core_ext/benchmark.rb:5:inms’
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:40:in
block in render' actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:78:incleanup_view_runtime’
activerecord (3.1.1)
lib/active_record/railties/controller_runtime.rb:24:in
cleanup_view_runtime' actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:39:inrender’
actionpack (3.1.1) lib/action_controller/metal/implicit_render.rb:10:in
default_render' actionpack (3.1.1) lib/action_controller/metal/mime_responds.rb:268:inblock in retrieve_response_from_mimes’
actionpack (3.1.1) lib/action_controller/metal/mime_responds.rb:195:in
call' actionpack (3.1.1) lib/action_controller/metal/mime_responds.rb:195:inrespond_to’
app/controllers/carts_controller.rb:22:in show' actionpack (3.1.1) lib/action_controller/metal/implicit_render.rb:4:insend_action’
actionpack (3.1.1) lib/abstract_controller/base.rb:167:in
process_action' actionpack (3.1.1) lib/action_controller/metal/rendering.rb:10:inprocess_action’
actionpack (3.1.1) lib/abstract_controller/callbacks.rb:18:in block in process_action' activesupport (3.1.1) lib/active_support/callbacks.rb:416:in_run__371692982__process_action__266900328__callbacks’
activesupport (3.1.1) lib/active_support/callbacks.rb:386:in
_run_process_action_callbacks' activesupport (3.1.1) lib/active_support/callbacks.rb:81:inrun_callbacks’
actionpack (3.1.1) lib/abstract_controller/callbacks.rb:17:in
process_action' actionpack (3.1.1) lib/action_controller/metal/rescue.rb:17:inprocess_action’
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:30:in
block in process_action' activesupport (3.1.1) lib/active_support/notifications.rb:53:inblock
in instrument’
activesupport (3.1.1)
lib/active_support/notifications/instrumenter.rb:21:in instrument' activesupport (3.1.1) lib/active_support/notifications.rb:53:ininstrument’
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:29:in
process_action' actionpack (3.1.1) lib/action_controller/metal/params_wrapper.rb:201:inprocess_action’
activerecord (3.1.1)
lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (3.1.1) lib/abstract_controller/base.rb:121:inprocess’
actionpack (3.1.1) lib/abstract_controller/rendering.rb:45:in process' actionpack (3.1.1) lib/action_controller/metal.rb:193:indispatch’
actionpack (3.1.1) lib/action_controller/metal/rack_delegation.rb:14:in
dispatch' actionpack (3.1.1) lib/action_controller/metal.rb:236:inblock in
action’
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:in call' actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:indispatch’
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:29:in call' rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:inblock in call’
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in block in recognize' rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:inoptimized_each’
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in recognize' rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:incall’
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:532:in
call' actionpack (3.1.1) lib/action_dispatch/middleware/best_standards_support.rb:17:incall’
rack (1.3.6) lib/rack/etag.rb:23:in call' rack (1.3.6) lib/rack/conditionalget.rb:25:incall’
actionpack (3.1.1) lib/action_dispatch/middleware/head.rb:14:in call' actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:21:incall’
actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in call' rack (1.3.6) lib/rack/session/abstract/id.rb:195:incontext’
rack (1.3.6) lib/rack/session/abstract/id.rb:190:in call' actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:incall’
activerecord (3.1.1) lib/active_record/query_cache.rb:62:in call' activerecord (3.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:incall’
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in
block in call' activesupport (3.1.1) lib/active_support/callbacks.rb:392:in_run_call_callbacks’
activesupport (3.1.1) lib/active_support/callbacks.rb:81:in
run_callbacks' actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:28:incall’
actionpack (3.1.1) lib/action_dispatch/middleware/reloader.rb:68:in
call' rack (1.3.6) lib/rack/sendfile.rb:101:incall’
actionpack (3.1.1) lib/action_dispatch/middleware/remote_ip.rb:48:in
call' actionpack (3.1.1) lib/action_dispatch/middleware/show_exceptions.rb:47:incall’
railties (3.1.1) lib/rails/rack/logger.rb:13:in call' rack (1.3.6) lib/rack/methodoverride.rb:24:incall’
rack (1.3.6) lib/rack/runtime.rb:17:in call' activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:incall’
rack (1.3.6) lib/rack/lock.rb:15:in call' actionpack (3.1.1) lib/action_dispatch/middleware/static.rb:53:incall’
railties (3.1.1) lib/rails/engine.rb:456:in call' railties (3.1.1) lib/rails/rack/content_length.rb:16:incall’
railties (3.1.1) lib/rails/rack/log_tailer.rb:14:in call' rack (1.3.6) lib/rack/handler/webrick.rb:59:inservice’
/home/led/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in
service' /home/led/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:inrun’
/home/led/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in
`block in start_thread’

im having a problem in adding my first item in to my cart it fails but
when adding second time it worked fine im just wondering if my adding
product method is right? thanks in advance more power to us!