Note that there are some explanatory texts on larger screens.

plurals
  1. POmongoid has_many relations
    text
    copied!<pre><code>this is index.html.erb &lt;p&gt; &lt;%= number_to_currency(product.price) %&gt; &lt;%= button_to 'Add to Cart', cart_items_path(:product_id =&gt; product) %&gt; &lt;/p&gt; </code></pre> <h2>cart.rb</h2> <pre><code>class Cart include Mongoid::Document include Mongoid::Timestamps # references_many :cart_items, :dependent =&gt; :destroy has_many :cart_items, :dependent =&gt; :destroy , :autosave =&gt; true # embeds_many :cart_items # accepts_nested_attributes_for :cart_items # attr_accessible :cart_items_attributes end </code></pre> <h2>cart_item.rb</h2> <pre><code>class CartItem include Mongoid::Document include Mongoid::Timestamps # referenced_in :cart # embedded_in :cart belongs_to :cart belongs_to :product # embedded_in :product field :product_id, :type =&gt; Integer field :cart_id, :type =&gt; Integer field :quantity, :type =&gt; Integer field :price, :type =&gt; Float end </code></pre> <h2>application_controller.rb</h2> <p>...</p> <p>private</p> <h1>current cart call anywhere in this app</h1> <p>def current_cart</p> <pre><code>cart = if session[:cart_id] Cart.find(session[:cart_id]) else Cart.create! end session[:cart_id] = cart.id </code></pre> <p>end</p> <h2>cart_items.rb</h2> <p>... def create</p> <pre><code>@cart = current_cart product = Product.find(params[:product_id]) @cart_item = @cart.cart_items.build(:product =&gt; product) # @cart_item = CartItem.new(params[:product =&gt; product]) # @cart_item = CartItem.new(params[:cart_item]) respond_to do |format| if @cart_item.save format.html { redirect_to(@cart_item, notice: 'Cart item was successfully created.') } format.json { render json: @cart_item, status: :created, location: @cart_item } else format.html { render action: "new" } format.json { render json: @cart_item.errors, status: :unprocessable_entity } end end </code></pre> <p>end ....</p> <h2>product.rb</h2> <pre><code>require 'carrierwave/orm/mongoid' class Product include Mongoid::Document include Mongoid::Timestamps # include Mongoid::Observing # include Mongoid::Tree has_many :line_items # before_destroy :ensure_not_referenced_by_any_line_item field :title, :type =&gt; String field :description, :type =&gt; String # field :image, :type =&gt; String mount_uploader :image, ImageUploader field :price, :type =&gt; Float field :category_id, :type =&gt; Integer field :stock_level, :type =&gt; Integer set_callback(:destroy, :before) do |document| document.ensure_not_referenced_by_any_line_item end protected def ensure_not_referenced_by_any_line_item if cart_items.empty? return true else errors.add(:base, 'Line Items present') return false end end end </code></pre> <hr> <p>and the result is this: <strong>NoMethodError in CartItemsController#create</strong> undefined method <strong>`cart_items'</strong> for BSON::ObjectId('4e156c78421aa918eb000005'):BSON::ObjectId Rails.root: /Users/user/railsworks/rcart</p> <p>Application Trace | Framework Trace | Full Trace app/controllers/cart_items_controller.rb:46:in <code>create' actionpack (3.1.0.rc4) lib/action_controller/metal/implicit_render.rb:4:in</code>send_action' actionpack (3.1.0.rc4) lib/abstract_controller/base.rb:167:in <code>process_action' actionpack (3.1.0.rc4) lib/action_controller/metal/rendering.rb:10:in</code>process_action' actionpack (3.1.0.rc4) lib/abstract_controller/callbacks.rb:18:in <code>block in process_action' activesupport (3.1.0.rc4) lib/active_support/callbacks.rb:416:in</code><em>run</em>_1145394839032970144__process_action_<em>2623355606222143076</em>_callbacks' activesupport (3.1.0.rc4) lib/active_support/callbacks.rb:386:in <code>_run_process_action_callbacks' activesupport (3.1.0.rc4) lib/active_support/callbacks.rb:81:in</code>run_callbacks' actionpack (3.1.0.rc4) lib/abstract_controller/callbacks.rb:17:in <code>process_action' actionpack (3.1.0.rc4) lib/action_controller/metal/instrumentation.rb:30:in</code>block in process_action' activesupport (3.1.0.rc4) lib/active_support/notifications.rb:55:in <code>block in instrument' activesupport (3.1.0.rc4) lib/active_support/notifications/instrumenter.rb:21:in</code>instrument' activesupport (3.1.0.rc4) lib/active_support/notifications.rb:55:in <code>instrument' actionpack (3.1.0.rc4) lib/action_controller/metal/instrumentation.rb:29:in</code>process_action' actionpack (3.1.0.rc4) lib/action_controller/metal/params_wrapper.rb:202:in <code>process_action' actionpack (3.1.0.rc4) lib/action_controller/metal/rescue.rb:17:in</code>process_action' activerecord (3.1.0.rc4) lib/active_record/railties/controller_runtime.rb:18:in <code>process_action' actionpack (3.1.0.rc4) lib/abstract_controller/base.rb:121:in</code>process' actionpack (3.1.0.rc4) lib/abstract_controller/rendering.rb:45:in <code>process' actionpack (3.1.0.rc4) lib/action_controller/metal.rb:193:in</code>dispatch' actionpack (3.1.0.rc4) lib/action_controller/metal/rack_delegation.rb:14:in <code>dispatch' actionpack (3.1.0.rc4) lib/action_controller/metal.rb:236:in</code>block in action' actionpack (3.1.0.rc4) lib/action_dispatch/routing/route_set.rb:65:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/routing/route_set.rb:65:in</code>dispatch' actionpack (3.1.0.rc4) lib/action_dispatch/routing/route_set.rb:29:in <code>call' rack-mount (0.8.1) lib/rack/mount/route_set.rb:152:in</code>block in call' rack-mount (0.8.1) lib/rack/mount/code_generation.rb:93:in <code>block in recognize' rack-mount (0.8.1) lib/rack/mount/code_generation.rb:75:in</code>optimized_each' rack-mount (0.8.1) lib/rack/mount/code_generation.rb:92:in <code>recognize' rack-mount (0.8.1) lib/rack/mount/route_set.rb:141:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/routing/route_set.rb:531:in <code>call' warden (1.0.4) lib/warden/manager.rb:35:in</code>block in call' warden (1.0.4) lib/warden/manager.rb:34:in <code>catch' warden (1.0.4) lib/warden/manager.rb:34:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/best_standards_support.rb:17:in <code>call' rack (1.3.0) lib/rack/etag.rb:23:in</code>call' rack (1.3.0) lib/rack/conditionalget.rb:35:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/head.rb:14:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/params_parser.rb:21:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/flash.rb:243:in</code>call' rack (1.3.0) lib/rack/session/abstract/id.rb:195:in <code>context' rack (1.3.0) lib/rack/session/abstract/id.rb:190:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/cookies.rb:321:in <code>call' activerecord (3.1.0.rc4) lib/active_record/query_cache.rb:54:in</code>call' activerecord (3.1.0.rc4) lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/callbacks.rb:29:in</code>block in call' activesupport (3.1.0.rc4) lib/active_support/callbacks.rb:392:in <code>_run_call_callbacks' activesupport (3.1.0.rc4) lib/active_support/callbacks.rb:81:in</code>run_callbacks' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/callbacks.rb:28:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/reloader.rb:68:in</code>call' rack (1.3.0) lib/rack/sendfile.rb:102:in <code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/remote_ip.rb:48:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/show_exceptions.rb:47:in <code>call' railties (3.1.0.rc4) lib/rails/rack/logger.rb:13:in</code>call' rack (1.3.0) lib/rack/methodoverride.rb:24:in <code>call' rack (1.3.0) lib/rack/runtime.rb:17:in</code>call' activesupport (3.1.0.rc4) lib/active_support/cache/strategy/local_cache.rb:72:in <code>call' rack (1.3.0) lib/rack/lock.rb:34:in</code>call' actionpack (3.1.0.rc4) lib/action_dispatch/middleware/static.rb:53:in <code>call' railties (3.1.0.rc4) lib/rails/engine.rb:438:in</code>call' railties (3.1.0.rc4) lib/rails/rack/content_length.rb:16:in <code>call' railties (3.1.0.rc4) lib/rails/rack/log_tailer.rb:14:in</code>call' rack (1.3.0) lib/rack/handler/webrick.rb:59:in <code>service' /Users/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:111:in</code>service' /Users/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:70:in <code>run' /Users/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:183:in</code>block in start_thread' Request</p> <p>Parameters:</p> <p>{"authenticity_token"=>"vwNaDytLihv5ev3M2tP5uZBjwR1/t6ld0iFF1gGwWsw=", "product_id"=>"4e126c01421aa93347000002"} Show session dump</p> <p>_csrf_token: "vwNaDytLihv5ev3M2tP5uZBjwR1/t6ld0iFF1gGwWsw=" cart_id: BSON::ObjectId('4e156c78421aa918eb000005') session_id: "532c1ca0f48a6fca905a97afba912e05"</p> <p>i did not get the problem point. why this happening undefined method `cart_items' ??? thanks.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload