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聲明模型「屬於」一個實例的另一個模型。 ...