Ruby on rails 活动记录错误:找不到id=1[其中(`customers`.`company\u id`不为空)和`customers`.`company\u id`=?]RUBY ON RAILS的客户

Ruby on rails 活动记录错误:找不到id=1[其中(`customers`.`company\u id`不为空)和`customers`.`company\u id`=?]RUBY ON RAILS的客户,ruby-on-rails,testing,rspec,controller,factory-bot,Ruby On Rails,Testing,Rspec,Controller,Factory Bot,我正在我的Ruby on Rails控制器上运行RSPEC测试,下面是我正在测试的控制器操作: 控制器代码: 错误: 我得到以下输出: #<Customer id: 2, user_id: nil, title: nil, first_name: "John", last_name: "Kusu", created_at: "2015-04-27 18:42:00", updated_at: "2015-04-27 18:42:00", deleted_at: nil, company_n

我正在我的Ruby on Rails控制器上运行RSPEC测试,下面是我正在测试的控制器操作:

控制器代码:

错误:

我得到以下输出:

#<Customer id: 2, user_id: nil, title: nil, first_name: "John", last_name: "Kusu", created_at: "2015-04-27 18:42:00", updated_at: "2015-04-27 18:42:00", deleted_at: nil, company_name: nil, company_id: 6>

据我所知,company_id被定义并设置为6。我不确定为什么会出现此错误?

您引用的是未正确设置的一对多关系

  def set_customer
    @customer = current_member.company.customers.find(params[:customer_id])
  end
此代码表示当前的_成员属于一个拥有多个客户的公司。在属于该公司的客户中,返回具有此id的客户

要实现这一点,您的customers表需要有一个名为company_id的外键

还要将所属的添加到您的客户类中,请先执行此操作!和测试。这可能就是你所需要的

class Customers::AccountsController < ApplicationController
  before_action :set_customer
  belongs_to :company

您能显示加载当前_成员的代码吗?stacktrace中的错误通常不会显示测试中使用的真实公司id。。。但可能有一个。这个部分意思是你在某处有一些东西,比如where company\u id:42,Rails将其转换为:where company\u id=?,42有意义吗?现在。。在你的控制器中有这样一个:当前成员->那是什么?您的控制器如何获得当前成员的控制权?您在rspec中做了哪些设置以确保当前成员已实际登录?请发布您在会员和公司、公司和客户之间建立关联的模型中的代码。在引用成员的公司中是否有多个外键,例如所有者id和成员id?
puts @customer.inspect
#<Customer id: 2, user_id: nil, title: nil, first_name: "John", last_name: "Kusu", created_at: "2015-04-27 18:42:00", updated_at: "2015-04-27 18:42:00", deleted_at: nil, company_name: nil, company_id: 6>
  def set_customer
    @customer = current_member.company.customers.find(params[:customer_id])
  end
class Customers::AccountsController < ApplicationController
  before_action :set_customer
  belongs_to :company