Note that there are some explanatory texts on larger screens.

plurals
  1. POAgile Web Development with Rails: Couldn't find Product with id=1
    primarykey
    data
    text
    <p>my destroy unit test for line_item model is failing with the error "Couldn't find Product with id=1". It seems that Rails can't destroy my line_item because it throws an exception when getting it from the database. Here is my LineItem model:</p> <pre><code>class LineItem &lt; ActiveRecord::Base belongs_to :product belongs_to :cart def total_price product.price * quantity end end </code></pre> <p>And here is the test suite:</p> <pre><code>require 'test_helper' class LineItemsControllerTest &lt; ActionController::TestCase setup do @line_item = line_items(:one) Rails.logger.debug(@line_item.to_yaml) Rails.logger.debug(Product.all.to_yaml) end test "should get index" do get :index assert_response :success assert_not_nil assigns(:line_items) end test "should get new" do get :new assert_response :success end test "should create line_item" do assert_difference('LineItem.count') do post :create, product_id: products(:ruby).id end assert_redirected_to cart_path(assigns(:line_item).cart) end test "should show line_item" do get :show, id: @line_item assert_response :success end test "should get edit" do get :edit, id: @line_item assert_response :success end test "should update line_item" do put :update, id: @line_item, line_item: @line_item.attributes assert_redirected_to line_item_path(assigns(:line_item)) end test "should destroy line_item" do Rails.logger.debug "Breaking!" assert_difference('LineItem.count', -1) do delete :destroy, id: @line_item end assert_redirected_to cart_path(path) end end </code></pre> <p>And here is the part that I have logged:</p> <pre><code> Breaking! [1m[35m (0.1ms)[0m SELECT COUNT(*) FROM "line_items" Processing by LineItemsController#destroy as HTML Parameters: {"id"=&gt;"980190962"} [1m[36mLineItem Load (0.1ms)[0m [1mSELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? LIMIT 1[0m [["id", "980190962"]] [1m[35mProduct Load (0.1ms)[0m SELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT 1 [["id", 1]] Completed 500 Internal Server Error in 3ms [1m[36m (0.1ms)[0m [1mrollback transaction[0m [1m[35m (0.1ms)[0m begin transaction [1m[36mLineItem Load (0.1ms)[0m [1mSELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? LIMIT 1[0m [["id", 980190962]] --- !ruby/object:LineItem attributes: id: 980190962 product_id: 1 cart_id: 1 created_at: 2012-05-25 20:37:17.000000000 Z updated_at: 2012-05-25 20:37:17.000000000 Z quantity: 1 product_price: [1m[35mProduct Load (0.2ms)[0m SELECT "products".* FROM "products" --- - !ruby/object:Product attributes: id: 207281424 title: Programming Ruby 1.9 description: Ruby is the fastest growing and most exciting dynamic language out there. If you need to get working programs delivered fast, you should add Ruby to your toolbox. image_url: ruby.png price: 49.5 created_at: 2012-05-25 20:37:17.000000000 Z updated_at: 2012-05-25 20:37:17.000000000 Z </code></pre> <p>Thanks!</p> <p><strong>EDIT:</strong> here is the Product model:</p> <pre><code>class Product &lt; ActiveRecord::Base has_many :line_items before_destroy :ensure_not_referenced_by_any_line_item # Validation validates :title, :description, :image_url, presence: true validates :title, length: { minimum: 10, message: "must be at least %{count} characters long" } validates :price, numericality: { greater_than_or_equal_to: 0.01 } validates :title, uniqueness: true validates :image_url, allow_blank: true, format: { with: %r{\.(gif|jpg|png)$}i, message: 'must be a URL for GIF, JPG or PNG image.' } private def ensure_not_referenced_by_any_line_item if line_items.empty? return true else errors.add :base, 'Line items present' return false end end end </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

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