Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::RecordNotFound:无法';找不到id为的债务人=_Ruby On Rails_Ruby_Rspec_Mongoid_Rails Postgresql - Fatal编程技术网

Ruby on rails ActiveRecord::RecordNotFound:无法';找不到id为的债务人=

Ruby on rails ActiveRecord::RecordNotFound:无法';找不到id为的债务人=,ruby-on-rails,ruby,rspec,mongoid,rails-postgresql,Ruby On Rails,Ruby,Rspec,Mongoid,Rails Postgresql,我最近将一个项目从MongoDB/mongoid转换为PostgreSQL。在转换之后,我所有的模型规格都通过了,我的大多数控制器规格都通过了。不过,我的三个控制器没有通过测试 根据以下模型定义,警报、订单和用户模型取决于客户和债务人模型: class Client < ActiveRecord::Base has_many :users, autosave: true, dependent: :destroy has_many :alerts, autosave: true, d

我最近将一个项目从MongoDB/mongoid转换为PostgreSQL。在转换之后,我所有的模型规格都通过了,我的大多数控制器规格都通过了。不过,我的三个控制器没有通过测试

根据以下模型定义,警报、订单和用户模型取决于客户和债务人模型:

class Client < ActiveRecord::Base
  has_many :users, autosave: true, dependent: :destroy
  has_many :alerts, autosave: true, dependent: :destroy
  has_many :orders, autosave: true, dependent: :destroy

  ...
end

class Debtor < ActiveRecord::Base
  has_many :orders, autosave: true
  has_many :alerts, autosave: true

  ...
end

class Alert < ActiveRecord::Base
  belongs_to :client
  belongs_to :debtor

  ...
end

class Order < ActiveRecord::Base
  belongs_to :client
  belongs_to :user
  belongs_to :debtor

  ...
end

class User < ActiveRecord::Base
  rolify

  devise :database_authenticatable, 
     :recoverable, :rememberable, :trackable, :validatable

  has_and_belongs_to_many :roles, :join_table => :users_roles
  belongs_to :client
  has_many :orders
end
相关控制器操作:

class OrdersController < ApplicationController
  before_filter :authenticate_user!
  before_filter :load_client
  before_filter :has_enough_units, :only => [:create]
  respond_to :html
  load_and_authorize_resource :debtor
  load_and_authorize_resource :order, :through => :client, :shallow => true

  def index
    if @client == nil
      @orders = Order.all
    else
      @orders = @client.orders.all
    end
    respond_with(@orders)
  end

  def show
    if @client == nil
      @order = Order.find(params[:id])
    else
      @order = @client.orders.find(params[:id])
    end
  end

  def new
    if current_user.has_role? :admin
      @order = Order.new
    else
      @order = @client.orders.build
    end
    @order.build_debtor
    @clients = Client.all.to_a
  end

  ...
end
class OrdersController[:create]
回复:html
加载和授权资源:债务人
加载和授权资源:顺序,:通过=>:client,:shall=>true
def索引
如果@client==nil
@订单=Order.all
其他的
@订单=@client.orders.all
结束
用(@orders)响应_
结束
def秀
如果@client==nil
@order=order.find(参数[:id])
其他的
@order=@client.orders.find(参数[:id])
结束
结束
def新
如果当前用户具有角色?:管理
@order=order.new
其他的
@订单=@client.orders.build
结束
@订单.构建\债务人
@clients=Client.all.to_a
结束
...
结束

希望这是足够的信息…

您还应该显示规格和控制器中发生的情况。这就是错误发生的地方。我添加了部分规范和控制器。我没有做任何事情只是为了减少代码量,但如果需要,我可以发布更多。
require 'spec_helper'

describe OrdersController do
  before (:each) do
    @user, @user2, @user3, @admin = FactoryGirl.create(:user), FactoryGirl.create(:user), FactoryGirl.create(:user), FactoryGirl.create(:user)
    @client, @client2 = FactoryGirl.create(:client), FactoryGirl.create(:client)
    @debtor, @debtor2, @debtor3 = FactoryGirl.create(:debtor), FactoryGirl.create(:debtor), FactoryGirl.create(:debtor)
    @order, @order2, @order3, @order4 = FactoryGirl.create(:order), FactoryGirl.create(:order), FactoryGirl.create(:order),FactoryGirl.create(:order)
    @role = FactoryGirl.create(:role)
    @admin_role = FactoryGirl.create(:admin_role)
    @vip_role = FactoryGirl.create(:vip_role)
    @user.roles << @role
    @user2.roles << @vip_role
    @user3.roles << @role
    @admin.roles << @admin_role
    @client.users << @user << @admin
    @client.orders << @order << @order2
    @client2.users << @user2 << @user3
    @client2.orders << @order3 << @order4
  end

  context "logged in as a regular user" do
    before { sign_in @user }

    describe "GET #index" do
      before { get :index, client_id: @user.client_id }

      it "assigns a list of orders belonging to user client" do
        assigns(:orders).to_a.should eq([@order, @order2])
      end
      it "renders the :index template" do
        response.should render_template :index, client_id: @user.client_id
      end
    end

    describe "GET #show" do
      context "for order belonging to user client" do
        before { get :show, client_id: @user.client_id, id: @order }

        it "assigns the requested order to @order" do
          assigns(:order).should eq(@order)
        end
        it "renders the :show template" do
          response.should render_template :show, client_id: @user.client_id, id: @order
        end
      end

      context "for order not belonging to user client" do
        before { get :show, client_id: @client2.id, id: @order3 }

        it "redirects to the home view" do
          response.should redirect_to root_url
        end
      end 
    end

    describe "GET #new" do
      it "renders the new template" do
        get :new, client_id: @user.client_id
        response.should render_template :new, client_id: @user.client_id
      end
    end

    ...
  end
end
class OrdersController < ApplicationController
  before_filter :authenticate_user!
  before_filter :load_client
  before_filter :has_enough_units, :only => [:create]
  respond_to :html
  load_and_authorize_resource :debtor
  load_and_authorize_resource :order, :through => :client, :shallow => true

  def index
    if @client == nil
      @orders = Order.all
    else
      @orders = @client.orders.all
    end
    respond_with(@orders)
  end

  def show
    if @client == nil
      @order = Order.find(params[:id])
    else
      @order = @client.orders.find(params[:id])
    end
  end

  def new
    if current_user.has_role? :admin
      @order = Order.new
    else
      @order = @client.orders.build
    end
    @order.build_debtor
    @clients = Client.all.to_a
  end

  ...
end