"должен получить шоу" тест контроллера не удалось для вложенного ресурса

У меня есть User модель и Shoppingcart модель где

# user.rb
class User < ActiveRecord::Base
    has_one :shoppingcart
end

а также

# shopppingcart.rb
class Shoppingcart < ActiveRecord::Base
    belongs_to :user
end

и у меня есть это в routs.rb:

resources :users do
    resource :shoppingcart
end

и в Shoppingcarts_controller.rb у меня есть

class ShoppingcartsController < ApplicationController
    def show
        @user = User.find(current_user)
        @shoppingcart = @user.build_shoppingcart
    end
end

и в shoppingcarts_controller_test.rb:

require 'test_helper'
class ShoppingcartsControllerTest < ActionController::TestCase
    def setup
        @user = users(:michael)
    end
    test "should get show" do
        puts(@user.name) # => Michael Example
        puts(@user.id) # => 762146111
        get :show # error line
        assert_response :success
    end
end

Но когда я запускаю тест, я получаю ActiveRecord::RecordNotFound: Couldn't find User with 'id'=, Когда я закомментирую строку ошибки, ошибка исчезает, и все работает. Что касается не тестового кода, все работает. Я могу достичь users/1/shoppingcart без проблем, поэтому проблема должна исходить из самого теста. Как сделать тест для действия с вложенным ресурсом?

SessionsHelper.rb:

module SessionsHelper

    # Returns the current logged-in user (if any).
    def current_user
        if (user_id = session[:user_id])
            @current_user ||= User.find_by(id: user_id)
        elsif (user_id = cookies.signed[:user_id])
            user = User.find_by(id: user_id)
            if user && user.authenticated?(:remember, cookies[:remember_token])
                log_in user
                @current_user = user
            end
        end
    end
end 

1 ответ

Решение

find метод требует первичного ключа конкретного пользователя от Users таблица, а не сам пользователь. Первичный ключ id, так что вам нужно изменить эту строку в вашем контроллере.

@user = User.find(params[:user_id])
Другие вопросы по тегам