1

我有两个型号UsersAccounts它有关系建筑协会在工厂女孩

Users has_many Accounts via `created_by_id` 

users.rb的

FactoryGirl.define do 
    factory :user do 
    first_name {Faker::Name.first_name} 
    last_name {Faker::Name.last_name} 
    email {Faker::Internet.email} 
    username {Faker::Internet.user_name} 
    password {Faker::Internet.password} 
    end 

end 

accounts.rb

FactoryGirl.define do 
    factory :account do 
    name {Faker::Company.name} 
    association :user 
    end 

end 

模式

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, 
     :validatable, :confirmable, :invitable 

    has_many :accounts 

    # validations 
    validates :first_name, presence: true 
    validates :last_name, presence: true 
    validates :email, presence: true, 
        uniqueness: {case_sensitive: false}, 
        :email => true 
    validates :username, uniqueness: {case_sensitive: false, allow_blank: true} 

    before_validation :downcase_attributes 


    def name 
    "#{first_name} #{last_name}" 
    end 

    private 

    def downcase_attributes 
    self.email = email.try(:downcase) 
    self.username = username.try(:downcase) 
    end 
end 

账户模式

class Account < ActiveRecord::Base 

    extend FriendlyId 
    friendly_id :name, use: :slugged 

    belongs_to :users, foreign_key: "created_by_id" 


    # Methods 

    def should_generate_new_friendly_id? 
    name_changed? 
    end 

end 

当我尝试测试工厂的有效性由以下

require 'rails_helper' 

describe Account, type: :model do 

    context "valid Factory" do 
    it "has a valid factory" do 
     expect(build(:account)).to be_valid 
    end 
    end 

    context "validations" do 
    before { create(:account) } 

    context "presence" do 
     it { should validate_presence_of :name } 
    end 

    end 

end 

错误

Account 
    valid Factory 
    has a valid factory (FAILED - 1) 
    validations 
    presence 
     example at ./spec/models/account_spec.rb:15 (FAILED - 2) 

Failures: 

    1) Account valid Factory has a valid factory 
    Failure/Error: expect(build(:account)).to be_valid 
    NoMethodError: 
     undefined method `user=' for #<Account:0x007f858a4783a0> 
    # ./spec/models/account_spec.rb:7:in `block (3 levels) in <top (required)>' 

    2) Account validations presence 
    Failure/Error: before { create(:account) } 
    NoMethodError: 
     undefined method `user=' for #<Account:0x007f8595154088> 
    # ./spec/models/account_spec.rb:12:in `block (3 levels) in <top (required)>' 

Finished in 0.87731 seconds (files took 5.61 seconds to load) 
2 examples, 2 failures 

Failed examples: 

rspec ./spec/models/account_spec.rb:6 # Account valid Factory has a valid factory 
rspec ./spec/models/account_spec.rb:15 # Account validations presence 
+0

尝试将'belongs_to:users,foreign_key:“created_by_id”'更改为'belongs_to:user,foreign_key:“created_by_id”' – Pavan

回答

1

这条线:

belongs_to :users, foreign_key: "created_by_id" 

应改为:

belongs_to :user, foreign_key: :created_by_id # notice singular :user 

docs

甲belongs_to的关联建立一个 一到一个连接与另一个模型,例如的每个实例0声明模型“属于”一个实例的另一个模型。 ...