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:
<%= item.quantity %>× | <%= item.product.title %> | <%= number_to_currency(item.total_price) %> |
Total | <%= number_to_currency(@cart.total_price) %> |
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:in
total_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:in
each’
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:in
instrument’
actionpack (3.1.1) lib/action_view/template.rb:142:in render' actionpack (3.1.1) lib/action_view/renderer/template_renderer.rb:40:in
block (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:in
block
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:in
instrument’
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:in
block 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:in
render_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:in
wrap_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:in
render_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:in
render_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:in
render_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:in
render’
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:in
block 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:in
ms’
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:in
cleanup_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:in
render’
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:in
block 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:in
respond_to’
app/controllers/carts_controller.rb:22:in show' actionpack (3.1.1) lib/action_controller/metal/implicit_render.rb:4:in
send_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:in
process_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:in
run_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:in
process_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:in
block
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:in
instrument’
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:in
process_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:in
process’
actionpack (3.1.1) lib/abstract_controller/rendering.rb:45:in process' actionpack (3.1.1) lib/action_controller/metal.rb:193:in
dispatch’
actionpack (3.1.1) lib/action_controller/metal/rack_delegation.rb:14:in
dispatch' actionpack (3.1.1) lib/action_controller/metal.rb:236:in
block 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:in
dispatch’
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:in
block 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:in
optimized_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:in
call’
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:in
call’
rack (1.3.6) lib/rack/etag.rb:23:in call' rack (1.3.6) lib/rack/conditionalget.rb:25:in
call’
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:in
call’
actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in call' rack (1.3.6) lib/rack/session/abstract/id.rb:195:in
context’
rack (1.3.6) lib/rack/session/abstract/id.rb:190:in call' actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:in
call’
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:in
call’
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:in
call’
actionpack (3.1.1) lib/action_dispatch/middleware/reloader.rb:68:in
call' rack (1.3.6) lib/rack/sendfile.rb:101:in
call’
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:in
call’
railties (3.1.1) lib/rails/rack/logger.rb:13:in call' rack (1.3.6) lib/rack/methodoverride.rb:24:in
call’
rack (1.3.6) lib/rack/runtime.rb:17:in call' activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:in
call’
rack (1.3.6) lib/rack/lock.rb:15:in call' actionpack (3.1.1) lib/action_dispatch/middleware/static.rb:53:in
call’
railties (3.1.1) lib/rails/engine.rb:456:in call' railties (3.1.1) lib/rails/rack/content_length.rb:16:in
call’
railties (3.1.1) lib/rails/rack/log_tailer.rb:14:in call' rack (1.3.6) lib/rack/handler/webrick.rb:59:in
service’
/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:in
run’
/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!