使用外键创建模型实例时出现Rails 5错误

时间:2018-02-09 18:34:26

标签: ruby-on-rails ruby activerecord

此时我正在使用两种型号:机场和航班。 航班属于原始机场和目的地机场。当我尝试创建Flight模型实例时,出现以下错误:

ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:没有这样的表:main.destination_airports

我已设置我的代码以匹配此处的示例:https://www.theodinproject.com/courses/ruby-on-rails/lessons/active-record-associations

我已经研究过这个问题(在这里和其他地方),但是不能发现任何与我的情况相符的东西。我无法弄清楚出了什么问题。必须简单。也许是迁移的东西?在此先感谢您的帮助。

相关代码:

机场型号:

class Airport < ApplicationRecord
  has_many :departing_flights, foreign_key: "origin_airport_id", 
class_name: "Flight"
  has_many :arriving_flights, foreign_key: "destination_airport_id", 
class_name: "Flight"

  validates :abbreviation, presence: true, length: { is: 3 }

end

飞行模型:

class Flight < ApplicationRecord
  belongs_to :origin_airport, class_name: "Airport"
  belongs_to :destination_airport, class_name: "Airport"
  has_many :bookings
  has_many :passengers, through: :bookings
end

迁移:

class CreateAirports < ActiveRecord::Migration[5.1]
  def change
    create_table :airports do |t|
      t.string :abbreviation
      t.string :full_name
      t.string :city
      t.string :state
      t.string :zip

      t.timestamps
    end
  end
end

class CreateFlights < ActiveRecord::Migration[5.1]
  def change
    create_table :flights do |t|
      t.references :origin_airport, foreign_key: true
      t.references :destination_airport, foreign_key: true
      t.datetime :depart_time
      t.datetime :arrive_time
      t.integer :capacity
      t.string :airline
      t.string :flight_number

      t.timestamps
    end
  end
end

2 个答案:

答案 0 :(得分:0)

检查迁移的文件名,也许它们没有以正确的顺序运行?

此外,您可能只需要在适当的环境(RAILS_ENV=development

中运行迁移

答案 1 :(得分:0)

更新:我找到了(一个?)答案 - 更改了flight表的迁移,用t.integer替换了t.references,用&#34; x_id&#34;替换了列名。纠正了这个问题。那么,只有在使用列id的模型名称时才能使用引用吗?