2017-05-29 55 views
1

我是Ruby on Rails的初学者,我尝试创建一个seed.rb文件来填充我的数据库。无法使用belongs_to关系创建新的Activerecord

但是,我在创建新的Request记录时遇到了问题。

这是我的种子文件:

if Rails.env == "development" || Rails.env == "test" 

    avaya = Company.create!(name: "Avaya") 
    microsoft = Company.create!(name: "Microsoft") 
    bradesco = Company.create!(name: "Bradesco") 

    customer = Customer.create!(name: "Leon Schmidt", email: "[email protected]", company_id: avaya.id) 
    Customer.create!(name: "Teri Wright", email: "[email protected]", company_id: avaya.id) 
    Customer.create!(name: "Jasmine Bush", email: "[email protected]", company_id: microsoft.id) 
    Customer.create!(name: "Jake Blair", email: "[email protected]", company_id: bradesco.id) 

    rate = Rate.create!(rate: 0.0165, days: 10, default_rate: true) 

    Request.create!(title_value: 1500, term: 28, monthly_revenue: 75000, receivable_value: 1425.75, rate_id: rate.id, customer_id: customer.id) 

elsif Rails.env == "production" 

    Rate.create(rate: 0.0165, days: 10, default_rate: true) 

end 

每当我跑耙分贝:复位重新填充开发数据库我得到这个错误:

rake aborted! 
ActiveRecord::RecordInvalid: Validation failed: Customers must exist 
c:/Desenvolvimento/Coding Tests/FactoringRateCalculator/db/seeds.rb:23:in `<top (required)>' 
Tasks: TOP => db:reset => db:setup => db:seed 

请注意,第23行是:Request.create!(title_value: 1500, term: 28, monthly_revenue: 75000, receivable_value: 1425.75, rate_id: rate.id, customer_id: customer.id)

我的模特如下:

class Customer < ApplicationRecord 
    belongs_to :company 
    has_many :requests 

    validates_associated :requests 
    validates :name, presence: true 
    validates :email, presence: true, email: true 
end 

class Request < ApplicationRecord 
    belongs_to :customers, required: true 
    belongs_to :rate, required: true 

    validates :term, presence: true, numericality: { greater_than_or_equal_to: 10 } 
    validates :title_value, presence: true, numericality: { greater_than_or_equal_to: 500 } 
    validates :monthly_revenue, :receivable_value, presence: true, numericality: true 
end 

class Rate < ApplicationRecord 
    has_many :requests 
    validates_associated :requests 

    validates :rate, numericality: true, presence: true 
    validates :days, numericality: { greater_than_or_equal_to: 10 }, presence: true 
    validates :rate, :days, :default_rate, presence: true 
end 

class Company < ApplicationRecord 
    has_many :customers 

    validates_associated :customers 
    validates :name, presence: true 
end 

我使用Ruby 2.3和Rails 5.1。

回答

1

required验证与模型的复数形式规定:

belongs_to :customers, required: true 

尝试使用奇异方式:

belongs_to :customer, required: true 

这就是为什么错误说“客户”"ActiveRecord::RecordInvalid: Validation failed: Customers must exist",因为你的种子是按照你指定的关系制造的。

+0

是的,你是对的!我将'客户'改为'客户',它工作。谢谢您的帮助! – Felipe

+0

不客气!我会更新答案。 –

相关问题